NumPy-taulukoiden siivuttaminen

Luodaan ensin uusi yksiulotteinen taulukko (vektori):

import numpy as np

v = np.arange(100, 1100, 100)
# v on array([ 100,  200,  300,  400,  500,  600,  700,  800,  900, 1000])
# indeksi:     0     1     2     3     4     5     6     7     8    9

NumPy-taulukoiden siivuttaminen toimii samaan tapaan kuin listojen siivuttaminen. Merkinnässä [start:stop:askel], stop-alkio ei kuulu enää siivuun. askel-osuus ei ole pakollinen. 

Siivutetaan yllä luotu vektori v:

siivu1 = v[0:4] 
# siivu1 on array([100, 200, 300, 400])
siivu2 = v[5:7] 
# siivu2 on array([600, 700])
siivu3 = v[0:7:2]
# siivu3 on array([100, 300, 500, 700])

NumPy-tarjoaa myös erittain käytannöllisen : -indeksoinnin Matlabin tapaan. -indeksi tarkoittaa kyseisen ulottuvuuden kaikkia indeksejä:

# Määritellään 3 x 4 matriisi M
M = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8],
              [9, 10, 11, 12]])
# Matriisin M kaikkien rivien kolmas sarake
A = M[:, 2] # array([ 3,  7, 11])
# Matriisin M toisen rivin kaikki sarakkeet
B1 = M[1, :] # array([5, 6, 7, 8])
# Rivin siivuttamisen voi tehdä myös merkinnällä, jossa sarakkeet jätetään pois
B2 = M[1]    # array([5, 6, 7, 8])

:-indeksointia voi käyttää myös näin:

# Poimitaan matriisin M kaikkien rivien joka toinen sarake
A2 = M[:, 0::2]

jolloin taulukko A2 saa arvon:

array([[ 1,  3],
       [ 5,  7],
       [ 9, 11]])

Merkintä M[:, 0::2] tarkoittaa siis, että poimitaan 

  • kaikilta riveiltä (kaksoispiste ennen pilkkua) 
  • ensimmäisestä sarakkeesta lähtien (0) 
  • viimeiseen sarakkeeseen asti (stop-arvo puuttuu)
  • kahden sarakkeen askelvälillä (2).

Tehtävä 4.3.1