34 Sissejuhatus

NumPy (ingl Numerical Python) on mitmemõõtmeliste järjendite töötlemiseks mõeldud Pythoni moodul, mis loodi 1995. aastal ja kandis nime Numeric. Alates aastast 2006 kannab moodul nime NumPy. Mooduli loojaks on ameeriklane Travis Oliphant, kes on andmeteadlane ja ärimees ning on õppinud näiteks matemaatikat ja elektrotehnikat.

NumPy järjendid jagatakse mõõtmete järgi erinevatesse kategooriatesse. Selles materjalis pöörame peamist tähelepanu ühe- ja kahemõõtmelistele järjenditele. On võimalik töödelda ka kolmemõõtmelistest kuni N-mõõtmeliste järjenditeni, kuid nende kasutamist selles materjalis ei tutvustata. Käesolev peatükk tutvustab NumPy peamisi funktsionaalsusi ühe ja kahemõõtmeliste järjendite peal. Lisaks õpetame ka andmete visualiseerimist Matplotlib ja Plotly moodulite abil. Materjali loomisel on kasutatud järgmisi programmide ja moodulite versioone:

  • Python 3.8.5
  • Thonny 3.2.7
  • NumPy 1.19.1
  • Matplotlib 3.3.1
  • Plotly 4.9.0
  • Windows 10 ja macOS Catalina

Miks kasutada NumPyt?

Tänapäevases maailmas, kus tehisintellekti kasutatakse pea igal pool, ei oleks võimalik masinõppe algoritme treenida ehk tehisintellekti “õpetada” ilma kiirete arvutuslike mooduliteta nagu näiteks NumPy.

Peamiselt kasutatakse NumPy moodulit andmeteaduses (ingl data science) ja teaduslikes arvutustes (ingl scientific computing), sest Numpy järjendid on kordades kiiremad kui Pythoni järjendid. Põhjus on selles, et lisaks Pythonile on kirjutamiseks kasutatud ka C keelt ning moodul on seetõttu palju kiirem kui tavaline Python.

Ühemõõtmelise järjendi elementidele arvu liitmine:
Python NumPy
import time

py_lst = list(range(10000))

py_lst_2 = []

py_t0 = time.time()
for i in py_lst:
i += 3
py_lst_2.append(i)
py_t1 = time.time()

py_aeg_1x = py_t1 - py_t0

# Kulunud aeg sekundites
print(round(py_aeg_1x, 5))
import numpy as np
import time

np_arr = np.array(list(range(10000)))

np_t0 = time.time()
np_arr_3 = np_arr + 3
np_tn = time.time()

np_aeg_1x = np_tn - np_t0

# Kulunud aeg sekundites
print(round(np_aeg_1x, 5))
>>> %Run guido.py
  0.00199
>>> %Run guido.py
  0.0

 !  Näiteprogrammide katsetamisel võivad kiiruse tulemused olla igakord erinevad, sest kiirus oleneb ka arvuti enda võimekusest.

NumPy kiire arvutamine tuleb eriti esile just väga suurte andmestike puhul. Eelnenud näites näeme, et NumPy on kordades kiirem.

Ka kahemõõtmeliste järjendite puhul on NumPy kiire.

Kahemõõtmelisest järjendist kriteeriumile vastavate arvude leidmine:
Python NumPy
import time

py_lst_2x = []
for i in range(1000):
    rida = []
    for j in range (1000):
        rida.append(j)
    py_lst_2x.append(rida)

py_500 = []
py_t0_2x = time.time()
for i in range(len(py_lst_2x)):
    for j in range(len(py_lst_2x[0])):
        if py_lst_2x[i][j] > 500:
            py_500.append(py_lst_2x[i][j])
py_t1_2x = time.time()

py_aeg_2x = py_t1_2x - py_t0_2x


# Kulunud aeg sekundites
print(round(py_aeg_2x, 5))
import numpy as np
import time


py_lst_2x = []
for i in range(1000):
    rida = []
    for j in range (1000):
        rida.append(j)
    py_lst_2x.append(rida)

np_arr_2x = np.array(py_lst_2x)

np_t0_2x = time.time()
np_500 = np_arr_2x[np_arr_2x > 500]
np_tn_2x = time.time()

np_aeg_2x = np_tn_2x - np_t0_2x

# Kulunud aeg sekundites

print(round(np_aeg_2x, 5))
>>> %Run guido.py
  0.25531
>>> %Run guido.py
  0.00299

 !  Näiteprogrammide katsetamisel võivad kiiruse tulemused olla igakord erinevad, sest kiirus oleneb ka arvuti enda võimekusest.

Ka lihtsate järjendi operatsioonide jaoks on NumPy mugavam, sest ei pea kasutama Pythonile omaseid tsükleid, kuna NumPyga toimuvad tehted otse järjenditel. Lisaks, tänu sisseehitatud funktsioonidele on NumPyiga lihtne andmeid analüüsida.

Ühemõõtmelisest järjendist positiivsete täisarvude võtmine:
Python NumPy
b = [3, -1, -2, 4, -6, 8]

tulemus = []
for element in b:
    if element > 0:
        tulemus.append(element)

print("Tulemuslist: ", tulemus)
import numpy as np

b = np.array([3, -1, -2, 4, -6, 8])

print("Positiivsed arvud: ", b[b > 0])
>>> %Run guido.py
  Tulemuslist:  [3, 4, 8]
>>> %Run guido.py
  Positiivsed arvud:  [3 4 8]

Lisaks sellele, et NumPyd kasutakase andmeteaduses, rakendatakse seda ka erinevates programmides. Näiteks on NumPyt kasutatud heliprogrammis Pitch Perfect ning multimeediast tuntud vektorgraafika programmi Inkspace’is kujutise moonutamisel.

Installeerimine

Läbivalt kasutatakse materjalides Thonnyt. Seetõttu on installeerimise sammud kirjeldatud just selle programmi põhjal.

Video NumPy installeerimisest Thonnys:

Installeerimise sammud:

  • Ava Thonny programm
  • Vali ülevalt menüüribalt Tools
  • Sealt vali Manage packages…
  • Avaneb uus aken
  • Sisesta otsinguribale numpy
  • Klõpsa nupul Find package from PyPI
  • Kui avaneb numpy informatsioon, klõpsa nupul Install
  • Pärast installeerimist ongi Thonny programmil moodul NumPy
  • Kasutamiseks kirjuta import numpy as np programmi algusesse. Selleks, et kiiremini proovida NumPy funktsioone ja järjendi loomist, võib selle kirjutada ka otse käsureale

 !  np on levinud lühend NumPy kasutamiseks.

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