Introducerea NumPy

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.

Instalarea NumPy

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!

Obiectul ndarry

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

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.

formă

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

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

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

date este un obiect tampon Python care indică începutul datelor matricei. Dacă introducem următoarele:

array_location = my_array.data

vom obtine urmatoarele: .

ndim

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.

Exemplul 1

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].

Exemplul 2

În acest exemplu, voi rescrie primul exemplu din acest tutorial, dar folosind [] in loc de (), după cum urmează:

Exemplul 3

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 un ndarray 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 tasta F.

Deci, să creăm un gol [2,2] matrice de tip int. 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 în numpy.empty. Deci, dacă vrem să creăm a [2,2] zerouri de tip int, 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 cu numpy.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"), Unde A 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ă și Ordin este un argument opțional care se referă la ordinea indexului pe care am dori să o folosim atât pentru citirea matricei A ș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 și A î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 noi 16 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 și a2 sunt matrice care au aceeași formă și axă 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 priveste indices_or_sections, dacă este un număr întreg N, matricea va fi împărțită în N 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.

Cod