32 NumPy ühemõõtmelised järjendid

Sageli on vaja analüüsida andmetabeli üht veergu või rida, näiteks leida veeru aritmeetiline keskmine. Selleks saab kasutada NumPy ühemõõtmelised järjendeid.

Järjendi loomine

Kõigepealt proovime NumPy abil luua ühemõõtmelisi järjendeid. NumPy kasutamiseks, peab selle Pythonis importima käsuga import numpy as np, kus np on levinud lühend selle mooduli kasutamiseks. Programmis ei pea pikalt kirjutama välja numpy, vaid saab kasutada lühendit np. Järjendi saab NumPy abil luua array funktsiooni kasutades. Võrreldes tavalise Pythoniga, kus järjendi elemendid lisatakse nurksulgude vahele, on NumPy erinev. NumPy puhul kasutatakse järjendit array funktsiooni argumendina ehk np.array(järjend).

# NumPy järjendi loomine ja väljastamine
import numpy as np

x = np.array([1, 2, 3])
print(x)
>>> %Run guido.py
  [1 2 3]

 !  NumPy programmis puuduvad järjendi väljastamisel elementide vahel komad, näiteks [1 2 3].

Lisaks on võimalik luua järjend arange funktsiooni kasutades, mis on väga sarnane range funktsiooniga, kus esimene parameeter on sammu algus, teine sammu lõpp ja kolmas on sammu pikkus. Ka arange funktsiooni puhul ei kuulu sammu lõpp loodud järjendi elementide hulka.

x = np.arange(5)
print(x)
>>> %Run guido.py
  [0 1 2 3 4]
x = np.arange(1, 10, 2)
print(x)
>>> %Run guido.py
  [1 3 5 7 9]

Erinevalt tavalisest Pythoni range funktsioonist, mille argumendid peavad olema täisarvud,  võivad arange funktsiooni argumentideks olla ka ujukomaarvud.

x = np.arange(0, 3.5, 0.4)
print(x)
>>> %Run guido.py
  [0.  0.4 0.8 1.2 1.6 2.  2.4 2.8 3.2]

 !  Numpy järjendis ei kuvata väljastamisel nulle koma järel.

Lisaks saab luua järjendeid kasutades linspace funktsiooni, mis võib olla eriti kasulik jooniste loomisel. Selle funktsiooni abil saab luua järjendi, milles on teatud arv elemente mingist vahemikust ühtlase intervalli järgi. Näiteks tahame, et järjendis oleks 5 arvu lõigust 0-10 ja need arvud on võrdsel kaugusel üksteisest arvteljel.

x = np.linspace(0, 10, num=5)
print(x)
>>> %Run guido.py
  [ 0.   2.5  5.   7.5 10. ]

Järjendi suurus

Järjendi suuruse leidmine on sarnane Pythonile. Kui Pythonis on käsk len(järjend), siis NumPys kasutatakse funktsiooni size ja näeb see välja nii (olgu järjendi nimi x):

# NumPy järjendi elementide arvu leidmine ja väljastamine

x = np.array([1, 2, 3])
print("Järjendi suurus: ", x.size)
>>> %Run guido.py
  Järjendi suurus:  3

Järjendi tüübi muutmine

Väga lihtsalt saab Numpy järjendi dtype parameetrit kasutades muuta järjendi tüüpi. Näiteks soovime muuta järjendi elemendid ujukomaarvudeks.

int → float:
x = np.array([1, 2, 3], dtype=float)
print(x)
>>> %Run guido.py
  [1. 2. 3.]
float → bool:
x = np.array([1., 0., 6.], dtype=bool)
print(x)
>>> %Run guido.py
  [True False True]

 !  Arv 0 on alati False, ülejäänud arvud on alati True.

Samanimelise funktsiooni abil saab ka järjendi tüübi teada.

x = np.array([1, 2, 3, 4])
print(x.dtype)
>>> %Run guido.py
  int64

Järjend x on täisarvu tüüpi, mille suurus on 64-bitti, mida tähistatakse int64. See tähendab seda, et järjendi elemendid võivad olla täisarvud vahemikust -9223372036854775808 kuni 9223372036854775807 (-263 kuni 263-1). Täisarvud võivad olla ka 32-bitised (int32). Kuna suuremahuliste andmete töötlemisel on oluline ka ressursside haldamine nagu arvuti mälu jne, siis saab tüüpide koode kasutades täpselt määrata, kui palju mälu ressurssi võivad andmed kasutada ja sellepärast lisatakse sageli ka suurus juurde.

Selleks, et täpsemalt määrata andmetüübi suurus, kasutatakse NumPy järjendi tüüpidena ka spetsiaalsed sõnena esitatavaid tüüpide koode. Koodi esimene täht on vastava tüübi kood ja teine arv, mis tähistab selle suurust bittides (v. a UNICODE). Mõned neist on toodud järgnevas tabelis.

Kood Tähendus
'i4' 32-bitine täisarv
'f8' 64-bitine ujukomaarv
'S24' 24-biti pikkune sõne
'U25' 25-UNICODE tähemärgi pikkune sõne

 

Näiteks loome järjendi, mille elemendid on 64-bitised ujukomaarvud.

x = np.array([1, 2, 3], dtype="f8")
print(x)
>>> %Run guido.py
  [1. 2. 3.]

Eriti kasulik on esitatud tüüpide koode kasutada siis, kui analüüsitakse andmetabelit, milles on erinevat tüüpi andmeid, nii teksti kui ka arve. Täpsemalt vaata peatüki Kahemõõtmelised järjendid alapeatükki CSV failist lugemine.

Kui on vaja muuta juba olemasoleva järjendi tüüpi, siis seda saab teha, kasutades astype funktsiooni.

x = np.array([1, 2, 3])
y = x.astype(bool)
print(y)
>>> %Run guido.py
  [ True  True  True]

 

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, Ago Luberg, Birgy Lorenz, Einar Kivisalu, Meelis Antoi, ja Säde Mai Krusberg poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut