Numeric este un pachet care a fost inițial dezvoltat de Jim Hugunin. Acesta este considerat strămoșul NumPy, o bibliotecă Python și un proiect open-source creat de Travis Oliphant, care este numit Python numeric. Travis a creat NumPy prin încorporarea caracteristicilor lui Numarray pachet în Numeric.
Ideea fundamentală a NumPy este suportul pentru rețelele multidimensionale. Deci, NumPy poate fi considerat ca bază pentru calculul numeric în Python și a fost creat pentru a permite Python-ului să fie folosit în rezolvarea problemelor matematice și științifice. Modulul NumPy ne oferă sute de funcții matematice utile în plus față de constante cum ar fi baza logaritmilor naturali (e
) și pi (π
).
Acest tutorial arată cum putem folosi NumPy pentru a lucra cu matrice multidimensionale și descrie obiectul ndarray, un obiect fundamental al bibliotecii.
Din moment ce Python nu vine în pachet cu NumPy, primul pas pentru a utiliza această bibliotecă este de a continua și a instala. Acest lucru se poate face simplu executând următoarea comandă în linia de comandă:
pip install numpy
Pentru a vă asigura că NumPy a fost instalat cu succes, executați următoarele comenzi în IDLE Python:
În cazul în care import
declarația rulează cel puțin cu succes, atunci sunteți toți pregătiți!
ndarray
este un obiect fundamental al NumPy. Acest obiect este un N-dimensional, ceea ce înseamnă că conține o colecție de elemente de același tip indexate folosind N (dimensiunile matricei) întregi.
Atributele principale ale ndarray
sunt tipul de date (dtype
), formă
, mărimea
, itemsize
, date
, și ndim
. Să învățăm ce înseamnă fiecare atribut printr-un exemplu.
În acest exemplu, vom folosi NumPy pentru a crea o matrice. Nu voi da dimensiunile matricei și alte informații, așa cum vom vedea folosind atributele de mai sus.
Observați că am folosit mulțime
pentru a crea o matrice. Rezultatul scriptului de mai sus este următorul:
Să revenim acum la atributele noastre.
dtype
atributul poate fi rulat așa cum se arată în următoarea declarație:
data_type = my_array.dtype
Declarația de mai sus va reveni int32
ca tip de date. Aceasta înseamnă că elementele matricei sunt de tip int32
. Primesc 32
deoarece folosesc Python pe 32 de biți. Dacă utilizați un Python pe 64 de biți, veți obține Int64
, dar avem de-a face cu numere întregi la sfârșit.
Deoarece NumPy este utilizat în calculul științific, acesta are multe tipuri de date, așa cum se arată în documentație. Observați că majoritatea tipurilor de date NumPy se termină cu un număr care indică numărul de biți asociați cu tipul respectiv (acest lucru a fost menționat pe scurt în paragraful de mai sus).
Următoarele exemple arată modul în care putem converti de la un tip la altul:
bool (35) bool (0) bool (-1) float (adevărat) int (67.7) float (87)
Instructiunile de mai sus returneaza urmatoarele:
True False True 1.0 67 87.0
Deși putem converti de la un tip la altul, este important să rețineți că nu putem converti un număr complex într-un număr întreg sau un float.
Atributul de formă returnează o tuplă a dimensiunilor matricei. Deci, următoarea declarație:
array_shape = my_array.shape
va reveni (4,4)
, ceea ce înseamnă că matricea noastră este compusă din 4
rânduri și 4
coloane.
mărimea
atributul returnează numărul elementelor din matrice. Astfel, dacă tastăm:
array_size = my_array.size
vom obține 16
ca rezultat, ceea ce înseamnă că avem 16
elemente din gama noastră.
itemsize
atributul returnează dimensiunea unui element de matrice în octeți. Următoarea declarație:
array_item_size = my_array.itemsize
va reveni 4
. Aceasta înseamnă că fiecare element de matrice are dimensiunea de 4 octeți.
date
este un obiect tampon Python care indică începutul datelor matricei. Dacă introducem următoarele:
array_location = my_array.data
vom obtine urmatoarele:
.
Atributul ndim
va returna numărul dimensiunilor matricei. Deci, tastând următoarea declarație:
array_dimension = my_array.ndim
va reveni 2
, adică matricea constă din două dimensiuni.
După ce ați înțeles ce este diferit ndarray
atribute înseamnă, să aruncăm o privire la mai multe exemple de utilizare ndarray
.
Spuneți că vrem să creăm o nouă matrice cu un rând și cinci coloane. Am face acest lucru după cum urmează:
my_array = np.array ((1, 2, 3, 4, 5))
Rezultatul afirmației de mai sus este: [1 2 3 4 5]
.
În acest exemplu, voi rescrie primul exemplu din acest tutorial, dar folosind []
in loc de ()
, după cum urmează:
Acest exemplu arată cum folosim un tip de date structurat, unde declarăm numele câmpului și tipul de date corespunzător:
import numpy ca np height_type = np.dtype ([('înălțime', np.float)])
Dacă noi Print (data_type)
, vom obtine urmatoarele:
[("înălțime", "Putem aplica
height_type
la unndarray
obiect, după cum urmează:import numpy ca np height_type = np.dtype ([('înălțime', np.float)]) my_array = np.array ([(1.78,), (1.69,), accesați conținutul coloanei în înălțime (my_array ['height'])Selectarea elementelor
În această secțiune vă voi arăta cum să selectați anumite elemente din matrice. Pentru matricea noastră afișată mai sus în secțiunea "Obiect ndarry", să presupunem că dorim să selectăm elementul care se află pe al treilea rând și în a patra coloană. Vom face acest lucru după cum urmează:
my_array [2,3]Amintiți-vă că indexarea aici începe la
0
, și de aceea am scris[2,3]
in loc de[3,4]
.Mai multe despre matrice numerice
În această secțiune, vom merge mai adânc în matrice NumPy.
Grupe goale (neinitializate)
Putem crea o matrice goală folosind
numpy.empty
cu următoarea sintaxă:numpy.empty (formă, dtype, comandă)Semnificațiile parametrilor din constructorul de mai sus sunt după cum urmează
- Formă: forma (dimensiunile) matricei goale.
- dtype: tipul de ieșire dorit, care este opțional.
- Ordin: dacă doriți o matrice în stil C (rând-major), ați tasta
C
; dacă doriți o matrice FORTRAN (coloană majoră), ați tastaF
.Deci, să creăm un gol
[2,2]
matrice de tipint
. Putem face acest lucru după cum urmează:import numpy ca np empty_array = np.empty ([2,2], dtype = int) print (empty_array)Scriptul de mai sus va returna următoarele valori aleatorii, deoarece matricea nu a fost inițializată:
[[1852795252 111218] [7500288 53018624]]Array umplut cu zerouri
Pentru a crea o matrice unde elementele sunt toate nivele, folosim
numpy.zeros
. Constructorul are aceeași sintaxă și parametri ca înnumpy.empty
. Deci, dacă vrem să creăm a[2,2]
zerouri de tipint
, putem face acest lucru după cum urmează:import numpy ca np zeros_array = np.zeros ([2,2], dtype = int) print (zeros_array)Scriptul de mai sus va returna urmatoarele:
[[0 0] [0 0]]O matrice cu toate elementele având valoarea
1
pot fi create pur și simplu în același mod ca mai sus, dar cunumpy.ones
.Arrays cu valori uniforme într-o anumită gamă
Putem folosi
numpy.arange
pentru a crea o matrice cu valori uniform distribuite într-un interval specificat. Constructorul are următorul format:num.arange (start, stop, pas, dtype)Mai jos este semnificația fiecărui parametru:
- Start: acesta este locul unde începe intervalul. Valoarea implicită este
0
.- Stop: la sfârșitul intervalului, cu condiția ca acest număr să nu fie inclus.
- Etapa: distanța dintre valori. Valoarea implicită este
1
.- dtype: tipul de date al ieșirii. Dacă nu este specificat, tipul de date va fi același cu cel al intrării.
Să luăm un exemplu
numpy.arange
.import numpy ca np my_array = np.arange (1,10) print (my_array)Rezultatul scriptului de mai sus este:
[1 2 3 4 5 6 7 8 9]Reformarea unei matrice
Pentru a remodela o matrice, folosim
numpy.reshape
funcţie. Această funcție dă unei noi forme unei matrice fără a schimba datele. După cum se arată în documentație, funcția are următoarele atribute:numpy.reshape (a, forma de știri, ordin = "C")
, UndeA
este matricea pe care am dori să o remodelam,newshape
este noua formă dorită, cu condiția ca noua formă să fie compatibilă cu forma originară șiOrdin
este un argument opțional care se referă la ordinea indexului pe care am dori să o folosim atât pentru citirea matriceiA
și cum dorim să plasăm elementele în matricea reformată.
C
înseamnă citirea / scrierea elementelor utilizând ordinea indexului de tip C;F
înseamnă citirea / scrierea elementelor utilizând o comandă de index Fortran șiA
înseamnă citirea / scrierea elementelor în ordinea indexului Fortran dacăA
Fortran este contiguu în memorie, în ordine C, altfel.Știu că am acoperit mult în paragraful de mai sus, dar conceptul este foarte simplu. Să luăm matricea noastră originală
my_array
și încercați să o remodelați. Amintiți-vă că noua matrice (matrice remodelată) trebuie să fie compatibilă cu matricea originală. De exemplu,my_array
are forma(4,4)
, ce avem noi16
elemente din matrice, iar matricea nouă trebuie să aibă acel număr de elemente.Putem remodela
my_array
setând-o să aibă opt rânduri și două coloane, după cum urmează:import numpy ca np my_array = np.array ((6, 12, 93, 2), (5, 26, 78, 90), (3, 12, 16, 22) )) my_array_reshaped = np.reshape (my_array, (8,2))În acest caz, vom avea următoarea ieșire, unde avem de asemenea 16 elemente.
[[6 12] [93 2] [5 26] [78 90] [3 12] [16 22] [5 3] [1 16]]Dacă scriem declarația de reformare după cum urmează?
my_array_reshaped = np.reshape (my_array, (8,3))În acest caz, veți obține următoarea eroare:
ValueError: nu se poate remodela matricea de dimensiune 16 în formă (8,3)Concatenarea matricelor
Dacă vrem să aderăm două sau mai multe matrice de aceeași formă pe o anumită axă, putem folosi
numpy.concatenate
funcţie. Sintaxa acestei funcții este:numnumpy.concatenate ((a1, a2, ...), axa = 0) y.concatenate
.a1
șia2
sunt matrice care au aceeași formă șiaxă
este axa de-a lungul căreia matricea va fi integrată, cu condiția ca aceasta să fie implicită0
.Din nou, să luăm un exemplu pentru a simplifica conceptul. În acest exemplu, ne vom alătura (concatenând) trei tablouri.
import numpy ca np array_1 = np.array (((1, 2), (3, 4))) array_2 = np.array (((5, 6), (7,8)) array_3 = np.array (Array_1, array_2, array_3)) print ('First Array:') print (array_1) imprimare ('Second Array:') array_2) print ('Third Array:') imprimare (array_3) print ('Concatenated Array:') print (contacted_array)Rezultatul codului de mai sus este următorul:
Prima array: [[1 2] [3 4]] Al doilea array: [[5 6] [7 8]] Al treilea array: [[9 10] [11 12]] Array concatenat: [[1 2] ] [5 6] [7 8] [9 10] [11 12]Mese de împărțire
Contrar asamblării matricelor așa cum se arată în secțiunea de mai sus, să vedem cum putem împărți (diviza) o matrice în mai multe sub-matrice. Acest lucru se poate face folosind următoarea funcție:
num.split (ari, indices_or_sections, axis = 0)
Ary
este matricea care trebuie împărțită în sub-matrice. In ceea ce privesteindices_or_sections
, dacă este un număr întregN
, matricea va fi împărțită înN
planuri egale de-a lungul axă. Dacă este o matrice de 1-D de întregi ordonate, intrările indică unde de-a lungul axă matricea este împărțită.axă
este axa prin care să se împartă.Exemplul următor va inversa ceea ce am făcut în exemplul precedent, adică revenirea matricei concatenate în cele trei componente ale matricei sale:
import numpy ca np concatenated_array = np.array (((1, 2), (3, 4), (5, 6), (7,8), 9,10, 11,12) split_array = np.split (concatenated_array, 3) imprimare ('Original Array:') print (concatenated_array) imprimare ('Split Sub-arrays: Sub-array ") imprimare (split_array [1]) imprimare (" a treia Sub-array ") print (split_array [2])Rezultatul scriptului de mai sus este:
[1 2] [3 4]] Al doilea sub-array: Sub-array subdiviziune: [1 2] [3 4] -array [[5 6] [7 8]] A treia Sub-array [[9 10] [11 12]]Concluzie
După cum am văzut în acest tutorial, NumPy îl face foarte flexibil pentru a lucra cu mese. Tutorialul a fost doar o zgarietura pe suprafata acestei biblioteci interesante Python. NumPy mai are încă multe caracteristici care trebuie să se uite pentru a profita la maximum de această bibliotecă. O carte cuprinzătoare despre acest subiect de către creatorul NumPy însuși este ghidul NumPy.
Mai mult, vedeți ce avem disponibile pentru vânzare și pentru a studia pe piață și nu ezitați să puneți întrebări și să oferiți feedback-ul dvs. valoros utilizând feedul de mai jos.