36 NumPy ühemõõtmeliste järjendite elemendid

Järjendist elemendi võtmine

Üks lihtsamaid järjendi operatsioone on järjendist elemendi võtmine. Ühemõõtmelise järjendi puhul käib see samamoodi nagu Pythonis. Järjendi nime taha tuleb lisada nurksulgude vahele soovitud elemendi indeks.

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

 !  Meeldetuletuseks: indeksid algavad nullist.

Järjendisse elemendi/elementide lisamine

Nii Pythoni kui ka NumPy puhul käib elemendi lisamine append käsuga.

# NumPy järjendisse elementide lisamine

a = np.array([8, 9, 7, 10, 11, 12])

# Lisame järjendisse a ühe elemendi
a = np.append(a, 4)
print("Uue elemendiga järjend: ", a)
>>> %Run guido.py
  Uue elemendiga järjend:  [ 8  9  7 10 11 12  4]
# Lisame järjendisse a kaks elementi
a = np.append(a, [4, 5])
print("Uute elementidega järjend: ", a)
>>> %Run guido.py
  Uute elementidega järjend:  [ 8  9  7 10 11 12  4  5]

Järjendist elemendi/elementide otsimine

NumPyl on järjendist elemendi otsimise jaoks olemas funktsioon where, mis tagastab otsitava elemendi indeksi. Vaatame näidet. Olgu meil järjend a, mille elemendid on [1 2 3 3 4]. Leiame arvude 3 indeksid:

a = np.array([1, 2, 3, 3, 4])

# Where argumendiks on vastav tingimusavaldis
# Kõikide elementide indeksid, mis on võrdsed 3-ga
ix = np.where(a == 3)

# Indeksite väljastamine
print(ix)
>>> %Run guido.py
  (array([2, 3]),)

Tulemuseks saame ennikulaadse struktuuri, kus on NumPy järjend leitud indeksitega. Väga lihtsalt saab ka leitud indeksitega elemendid järjendist leida.

# Leiame leitud indeksitega elemendid
print(a[ix])
>>> %Run guido.py
  [3 3]

Tulemuseks on järjend leitud elementidega.

Elementide sorteerimine

Ühemõõtmeliste järjendite sorteerimisel saab kasutada sarnaselt Pythoni harilikule järjendile sort funktsiooni. Näiteks soovime elemendid järjestada kasvavalt vasakult paremale.

x = np.array([0, 8, 5, 1, 3])
print(np.sort(x))
>>> %Run guido.py
  [0 1 3 5 8]

Tehted järjendi elementidega

Siin tuleb kõige paremini välja NumPy eelis tavalise Pythoni ees. Oletame, et tahame teha kahe või enama järjendi elementide vahel järgnevaid tehteid: liitmine, lahutamine, korrutamine, korrutamine konstandiga, jagamine, astendamine. Kui Pythonis peab sellise tehte tegemiseks looma tsükli, siis NumPy puhul piisab ühest reast. NB! See toimib nii ainult juhul, kui järjendid sisaldavad sama palju elemente. Vaatame näidet, kus liidame igale järjendi elemendile 3 juurde:

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

Ka kahe järjendi liitmine on väga lihtne.

x = np.array([1, 2, 3])
y = np.array([10, 20, 30])
print(x + y)
>>> %Run guido.py
  [11 22 33]

Sarnaselt saab järjendeid omavahel lahutada, korrutada, jagada, astendada.

Järgnevalt teeme midagi veidi keerulisemalt. Olgu meil järjend, kus on inimeste kehakaalud kilogrammides ja järjend, kus on inimeste pikkused meetrites. Tahame arvutada nende järjendite põhjal inimeste kehamassiindeksi (KMI). KMI leidmiseks jagatakse kehakaal pikkuse ruuduga (KMI = kehakaal / pikkus**2). NumPyga on see lihtne.

kaal = np.array([66.4, 81.3, 54.0, 92.3])
pikkus = np.array([1.69, 1.81, 1.75, 1.95])
KMI = kaal / pikkus**2
print(np.round(KMI, 1)) # Ümardamine 1 koht pärast koma
>>> %Run guido.py
  [23.2 24.8 17.6 24.3]

Nüüd aga vaatame olukorda, kus meil on antud järjend, mis koosneb nii positiivsetest kui ka negatiivsetest täisarvudest. Me soovime teha programmi, mis väljastab kõik negatiivsed täisarvud järjendina. Pythonis peab selleks looma tulemuslisti. Sinna hakatakse lisama elemente algsest järjendist, mis vastavad meie avaldisele. Avaldis on element < 0.

# Pythoni järjendist negatiivsete täisarvude võtmine
b = [3, -1, -2, 4, -6, 8]

# Tulemuslist
tulemus = []

# Võtame järjendist b järjest elemente
for element in b:
    # Kui element on väiksem nullist...
    if element < 0:
    #...siis lisame selle elemendi tulemuslisti
    tulemus.append(element)

# Väljastame tulemuslisti
print("Tulemuslist: ", tulemus)
>>> %Run guido.py
  Tulemuslist:  [-1, -2, -6]

NumPy puhul on see palju lihtsam. Me saame avaldist kasutada otse järjendi peal, kirjutades avaldise nurksulgude vahele pärast järjendi nime. Siin on aga oluline, et avaldises esineks järjendi nimi. Ehk kui me tahame saada järjendist b negatiivseid täisarve, peab meie kontrollavaldis välja nägema b < 0. Samuti ei pea me looma tulemuslisti, kuna NumPy tagastab elemendid automaatselt järjendina.

import numpy as np

# NumPy järjendist negatiivsete täisarvude võtmine
b = np.array([3, -1, -2, 4, -6, 8])
print("Järjendi negatiivsed arvud: ", b[b < 0])
>>> %Run guido.py
  Järjendi negatiivsed täisarvud:  [-1 -2 -6]

Sarnaselt saab kasutada ka teisi tingimusavaldiste operaatoreid (==, >, >=, <=, !=).

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