Zoznamy Python sú náhradou za polia, ale nedokážu poskytnúť požadovaný výkon pri výpočte veľkých súborov číselných údajov.
Na vyriešenie tohto problému používame Knižnica NumPy jazyka Python. NumPy ponúka objekt poľa s názvom ndarray . Sú podobné štandardným sekvenciám Pythonu, ale líšia sa v určitých kľúčových faktoroch.
Čo je to NumPy Array?
NumPy pole je viacrozmerná dátová štruktúra, ktorá je jadrom vedeckých výpočtov v Pythone.
Všetky hodnoty v poli sú homogénne (rovnakého dátového typu).
Ponúkajú automatickú vektorizáciu a vysielanie.
Poskytujú efektívnu správu pamäte, ufuncs (univerzálne funkcie), podporujú rôzne typy údajov a sú flexibilné s indexovaním a delením.
Rozmery v poliach
Polia NumPy môžu mať viacero rozmerov, čo používateľom umožňuje ukladať údaje vo viacvrstvových štruktúrach.
Rozmery poľa:
| názov | Príklad | 
| 0D (nulový rozmer) | Skalárne – jeden prvok | 
| 1D (jednorozmerný) | Vektor- zoznam celých čísel. | 
| 2D (dvojrozmerný) | Matrix – tabuľka s údajmi | 
| 3D (trojrozmerný) | Tensor - Ukladanie farebného obrázka | 
Vytvorenie objektu Array
Objekty poľa NumPy nám umožňujú pracovať s poľami v Pythone. Zavolá sa objekt poľa ndarray .
Funkcia array() knižnice NumPy vytvorí ndarray.
Python3
     
  
     
     
    
python rstrip
| import>numpy as np>arr>=>np.array([>1>,>2>,>3>,>4>,>5>,>6>])> | 
>
>
Výkon
[1,2,3,4,5,6]>
Pole NumPy môžeme vytvoriť aj pomocou List a Tuple.
Vytvorte pole NumPy zo zoznamu
Môžete použiť alias np na vytvorenie ndarray z a zoznam pomocou metódy array().
li = [1,2,3,4] numpyArr = np.array(li)>
alebo
syntax git pull
numpyArr = np.array([1,2,3,4])>
Zoznam sa odovzdá metóde array(), ktorá potom vráti pole s rovnakými prvkami.
Príklad 1: Nasledujúci príklad ukazuje, ako inicializovať pole zo zoznamu.
Python3
     
  
     
     
    
ako previesť char na reťazec java
| import>numpy as np>>li>=>[>1>,>2>,>3>,>4>]>numpyArr>=>np.array(li)>print>(numpyArr)> | 
>
>
Výkon:
[1 2 3 4]>
Výsledné pole vyzerá rovnako ako zoznam, ale je to objekt NumPy.
Príklad 2: Zoberme si príklad, aby sme skontrolovali, či numpyArr je objekt NumPy alebo nie. V tomto príklade používame funkciu array() na konverziu zoznamu na pole NumPy a potom skontrolujeme, či ide o objekt NumPy alebo nie.
Python3
     
  
     
     
    
| import>numpy as np>>li>=>[>1>,>2>,>3>,>4>]>numpyArr>=>np.array(li)>>print>(>'li ='>, li,>'and type(li) ='>,>type>(li))>print>(>'numpyArr ='>, numpyArr,>'and type(numpyArr) ='>,>type>(numpyArr))> | 
>
>
Výkon:
li = [1, 2, 3, 4] and type(li) = numpyArr = [1 2 3 4] and type(numpyArr) =>
Ako vidíte, li je objekt zoznamu, zatiaľ čo numpyArr je objekt poľa NumPy.
Vytvorte NumPy Array z Tuple
Môžete urobiť ndarray z a násobný pomocou podobnej syntaxe.
tup = (1,2,3,4) numpyArr = np.array(tup)>
alebo
numpyArr = np.array((1,2,3,4))>
Nasledujúci príklad ilustruje, ako vytvoriť pole z n-tice. Tu používame funkciu array() na konverziu n-tice na pole NumPy.
Python3
     
  
strojopis foreach loop
     
     
    
| import>numpy as np>>tup>=>(>1>,>2>,>3>,>4>)>numpyArr>=>np.array(tup)>>print>(>'tup ='>, tup,>'and type(tup) ='>,>type>(tup))>print>(>'numpyArr ='>, numpyArr,>'and type(numpyArr) ='>,>type>(numpyArr))> | 
halda a halda triediť
>
>
Výkon:
tup = (1, 2, 3, 4) and type(tup) = numpyArr = [1 2 3 4] and type(numpyArr) =>
Upozorňujeme, že hodnota numpyArr zostáva rovnaká pre obe konverzie.
NumPy polia vs vstavané Python sekvencie
- Na rozdiel od zoznamov majú polia pevnú veľkosť a zmena veľkosti poľa povedie k vytvoreniu nového poľa, zatiaľ čo pôvodné pole sa vymaže.
- Všetky prvky v poli sú rovnakého typu.
- Polia sú rýchlejšie, efektívnejšie a vyžadujú menej syntaxe ako štandardné sekvencie Pythonu.
Poznámka: Numpy používajú rôzne vedecké a matematické balíčky založené na Pythone. Môžu brať vstup ako vstavanú sekvenciu Pythonu, ale pravdepodobne konvertujú údaje do poľa NumPy, aby dosiahli rýchlejšie spracovanie. To vysvetľuje potrebu porozumieť NumPy.
Prečo je Numpy Array taký rýchly?
Numpy polia sú zapísané väčšinou v jazyk C . Polia sú napísané v jazyku C a sú uložené v súvislých pamäťových miestach, vďaka čomu sú prístupné a ľahšie sa s nimi manipuluje. To znamená, že môžete získať úroveň výkonu kódu C jednoduchosťou písania programu Python.
- Homogénne údaje: Polia ukladajú prvky rovnakého typu údajov, vďaka čomu sú kompaktnejšie a pamäťovo efektívnejšie ako zoznamy.
- Pevný typ údajov: Polia majú pevný typ údajov, čo znižuje réžiu pamäte tým, že eliminuje potrebu ukladať informácie o type pre každý prvok.
- Súvislá pamäť: Polia ukladajú prvky do susedných pamäťových miest, čím sa znižuje fragmentácia a umožňuje efektívny prístup.

Pridelenie pamäte Numpy Array
Ak v systéme nemáte nainštalovaný NumPy, môžete tak urobiť podľa týchto krokov. Po nainštalovaní NumPy ho môžete importovať do svojho programu takto
import numpy as np>
Poznámka: Tu je np bežne používaný alias pre NumPy.
Alokácia dát v Numpy Array
V NumPy sú dáta alokované súvisle v pamäti podľa dobre definovaného rozloženia pozostávajúceho z dátovej vyrovnávacej pamäte, tvaru a krokov. To je nevyhnutné pre efektívny prístup k údajom, vektorizované operácie a kompatibilitu s nízkoúrovňovými knižnicami, ako sú BLAS a LAPACK .
- Data Buffer: Dátová vyrovnávacia pamäť v NumPy je jeden plochý blok pamäte, ktorý ukladá skutočné prvky poľa bez ohľadu na jeho rozmer. To umožňuje efektívne operácie po jednotlivých prvkoch a prístup k údajom.
- Tvar: Tvar poľa je n-tica celých čísel, ktoré predstavujú rozmery pozdĺž každej osi. Každé celé číslo zodpovedá veľkosti poľa pozdĺž špecifického rozmeru, ktorý definuje počet prvkov pozdĺž každej osi a je nevyhnutný pre správne indexovanie a pretváranie poľa.
- Kroky: Kroky sú n-tice celých čísel, ktoré definujú počet bajtov na krok v každej dimenzii pri prechode z jedného prvku na ďalší. Určujú medzery medzi prvkami v pamäti a merajú, koľko bajtov je potrebných na presun z jedného prvku do druhého v každej dimenzii.
 
Záver
NumPy pole v Pythone je veľmi užitočná dátová štruktúra a umožňuje nám s dátami vykonávať rôzne vedecké operácie. Je to veľmi pamäťovo efektívna dátová štruktúra a ponúka širokú škálu výhod oproti iným sekvenciám Pythonu.
V tomto návode sme podrobne vysvetlili polia NumPy. Pokryli sme definíciu, dimenzionalitu, prečo je to rýchle a ako funguje prideľovanie údajov v poli. Po dokončení tohto tutoriálu získate úplné hlboké znalosti o poli NumPy a budete ho môcť implementovať do svojich projektov Python.
