CHEM-A2600 - Kemiantekniikan ohjelmointikurssi, Luento-opetus, 30.5.2022-28.8.2022
This course space end date is set to 28.08.2022 Search Courses: CHEM-A2600
Python-oppimateriaali (CHEM-A2600)
NumPy-taulukot (array)
NumPy-taulukoita ja muita NumPyn ominaisuuksia käytettäessä ohjelmaan pitää aina tuoda numpy-moduuuli import-käskyllä. Tällä kurssilla moduuli tuodaan aina seuraavalla käskyllä, jolloin NumPyn funktioita voi kutsua lyhennettä np käyttäen:
import numpy as np
Taulukoiden luominen ja alkioihin viittaaminen
Taulukoita (array) voi luoda suoraviivaisesti numpy.array-funktion avulla.
Yksiulotteiset taulukot (vektorit)
Luodaan yksiulotteinen neljan alkion taulukko (eli vektori)
vektori = np.array([10, 20, 30, 40]) # indeksi: 0 1 2 3
Taulukon ulottuvuus (engl. dimension) tarkoittaa, montako indeksiä tarvitaan yhden alkion osoittamiseen. Yksiulotteisen esimerkkivektorin tapauksessa tarvitsemme vain yhden indeksin, joka saa arvot 0-3.
Taulukon alkiohin viittaaminen toimii kuten listojen kanssa (muista, että ensimmainen indeksi on 0):
eka = vektori[0] # 10 toka = vektori[1] # 20 vika_1 = vektori[3] # 40 vika_2 = vektori[-1] # 40
Kaksiulotteiset taulukot (matriisit)
Luodaan kaksiulotteinen kahden rivin ja kolmen sarakkeen taulukko (eli matriisi):
matriisi = np.array([[10, 20, 30], [40, 50, 60]])
Erona tavallisiin listoihin kaksiulotteisten NumPy-taulukkojen alkioihin voi viitata käytännöllisellä taulukko[rivi, sarake] -merkinnällä:
ekan_rivin_eka_sarake = M[0, 0] # 10 tokan_rivin_toka_sarake = M[1, 1] # 50 tokan_rivin_vika_sarake = M[1, -1] # 60
Myös tavallisista listoista tuttu merkintä taulukko[rivi][sarake] toimii, mutta se on kömpelömpi käyttää.
Kolmiulotteiset taulukot
Luodaan viimeisenä esimerkkinä kolmiulotteinen 2 x 2 x 3 taulukko:
T = np.array([[[1, 2, 3], [4, 5, 6]], [[10, 20, 30], [40, 50, 60] ]]) alkio = T[1, 1, 0] # 40
Taulukon ulottuvuuksien tarkastelu (ndim, shape, len)
Minkä tahansa NumPy-taulukon ulottuvuuksien määrän voi selvittää ndim-funktiolla:
matriisi = np.array([[10, 20, 30], [40, 50, 60]]) matriisin_ulottuvuus = np.ndim(matriisi) # palauttaa kokonaisluvun 2
shape-funktio palauttaa taulukon ulottuvuuksien dimensiot
# Käytetään yllä määriteltyä taulukkoa T T_dimensiot = np.shape(T) # palauttaa monikon (2, 2, 3)
Tuttu len-funktio palauttaa taulukon halutun ulottuvuuden pituuden:
# Käytetään yllä määriteltyjä taulukoita vektori ja T vektorin_pituus = len(vektori) # palauttaa kokonaisluvun 4 T_kolmas_ulottuvuus_pituus = len(T[0, 0]) # palauttaa kokonaisluvun 3
Taulukon suurimman tai pienimmän alkion indeksin etsiminen
NumPy-taulukon suurimman alkion indeksin voi etsiä argmax-funktiolla. Pienimmän alkion indeksi löytyy vastaavasti argmin-funktiolla. Jos tarvitset vain taulukon suurimman tai pienimmän arvon ilman indeksiä, käytä amax ja amin-funktioita:
luvut = np.array([3.1, 1.0, 0.4, 10.1]) print(f"Suurin luku: {np.amax(luvut):.1f}") print(f"Suurimman luvun indeksi: {np.argmax(luvut):d}") print(f"Pienin luku: {np.amin(luvut):.1f}") print(f"Pienimmän luvun indeksi: {np.argmin(luvut):d}")
tulostaa
Suurin luku: 10.1
Suurimman luvun indeksi: 3
Pienin luku: 0.4
Pienimmän luvun indeksi: 2
Listojen muuntaminen taulukoiksi
Yllä käytetty numpy.array-funktio muuntaa tavallisen listan NumPy-taulukoksi. Seuraavassa esimerkissä vektori v1 luodaan kokonaislukujen listasta [1, 2, 3, 4, 5]:
v1 = np.array([1, 2, 3, 4, 5])
Saman muunnoksen voi tehdä myös olemassaoleville listoille (tai monikoille):
lista = [1.1, 2.2, 3.3, 4.4]
v2 = np.array(lista)
# nyt v2 on array([ 1.1, 2.2, 3.3, 4.4])
M1 = np.array([lista, lista])
# Nyt M1 on kaksiulotteinen taulukko
# array([[ 1.1, 2.2, 3.3, 4.4],
# [ 1.1, 2.2, 3.3, 4.4]])
Nollilla alustetun taulukon luominen
Joskus on tarpeellista luoda ensin tyhjä nollilla alustettu taulukko, johon voi sitten lisätä dataa myöhemmin. Nollilla alustetun taulukon voi luoda numpy.zeros-funktiolla:
vektori = np.zeros(8) # Kahdeksan alkiota pitkä vektori täynnä nollia matriisi = np.zeros((9, 9)) # 9x9 matriisi täynnä nollia. zeros-funktion parametri on tässä monikko (9, 9).
Moniulotteisen taulukon tapauksessa numpy.zeros-funktion parametrin shape tulee olla monikko tai lista.
Kokonaislukuja sisältävien taulukoiden luominen arange-funktiolla
Kokonaislukuja sisältäviä taulukoita voi luoda range-funktiota vastaavalla numpy.arange-funktiolla:
v3 = np.arange(1, 10) # np.arange(alku, loppu) # Nyt v3 on array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # Huomaa, että viimenen alkio on loppu-1 (kuten range-funktiolla)
Myös muoto np.arange(alku, loppu, askel) on käytössä:
v4 = np.arange(2, 11, 2) # Nyt v4 on array([ 2, 4, 6, 8, 10])
Liukulukuja sisältävien taulukoiden luominen linspace-funktiolla
Liukulukuja sisältäviä taulukoita voi luoda numpy.linspace-funktiolla, jota kutsutaan numpy.linspace(start, stop, num). Parametri start on ensimmäinen luku, stop on viimeinen luku ja num on lukujen määrä välillä start..stop. Huomaa, etta oletuksena stop-luku tulee mukaan, toisin kuin arange-funktiossa!
v5 = np.linspace(0.1, 1, 10) # v5 on array([ 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]) v6 = np.linspace(-0.2, 0.2, 6) # v6 on array([-0.2 , -0.12, -0.04, 0.04, 0.12, 0.2 ])
Tällä kurssilla linspace-funktio on isossa roolissa esimerkiksi kuvaajia piirrettäessä. arange-funktiota käytämme vain vähän.
linspace-funktiota voi käyttää myös kokonaislukujen kanssa, mutta tällöin pitää vain tiedostaa, että tuloksena syntyvän taulukon luvut ovat liukulukuja, eivät kokonaislukuja:
v7 = np.linspace(-5, 5, 11) # v7 on array([-5., -4., -3., -2., -1., 0., 1., 2., 3., 4., 5.])
Jos tarvitset tasavälisiä lukuja logaritmisella asteikolla, voit käyttää funktiota numpy.logspace.
Tehtävä 4.2.1