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