Használati mód
A Numpy lehetőséget biztosít arra, hogy a mátrix indexelésekor egy, az indexelendő mátrixszal megegyező számú sorból és oszlopból logikai bool típusú mátrixot használjunk. A Numpy művelet csak azokra az elemekre hajtódik végre, amelyekre az indexelő bool mátrix megfelelő eleme True értékű.
Tekintsük a következő példát:
nparr = np.array([0, 1, 2, 3, 4, 5], dtype=np.uint8)
print(nparr)
nparr_cond = np.array([False, True, False, False, True, False], dtype=bool)
print(nparr_cond)
nparr[nparr_cond] = 255
print(nparr)
A futás eredményeként az alábbi kiírást kapjuk:
[0 1 2 3 4 5]
[False True False False True False]
[ 0 255 2 3 255 5]
Azokon a helyeken, ahol a logikai index True, ott megváltozik az érték 255-re, ahol False, ott nem.
Logikai értékű mátrixot nem csak manuálisan készíthetünk, hanem Numpy logikai művelettel is. Például:
nparr = np.array([0, 1, 2, 3, 4, 5], dtype=np.uint8)
nparr_cond2 = nparr > 2
nparr[nparr_cond2] = 255
print(nparr)
Azokon a helyeken lesz a nparr_cond2 index True, ahol az nparr mátrix értéke nagyobb 2-nél. Ezt használva az nparr mátrix indexelésre, ezeken a helyeken lesz 255 az nparr értéke ([ 0 1 2 255 255 255]).
A feltétel definíciót és az indexelést össze is vonhatjuk:
nparr[nparr > 2] = 255
Az index kifejezésben logikai mátrixok között további logikai műveleteket is definiálhatunk. Például az alábbi példa egy mátrix ([0 1 2 3 4 5]) 2-nél nagyobb egyenlő, de 4-nél kisebb egyenlő értékeit állítja 255 értékre ([ 0 1 255 255 255 5]):
nparr = np.array([0, 1, 2, 3, 4, 5], dtype=np.uint8)
nparr[(nparr >= 2) & (nparr <= 4)] = 255
print(nparr)
A kifejezés jobb oldalán nem csak konstans szerepelhet, hanem megfelelő méretű tömb/mátrix is. Például két egyforma méretű tömb/mátrix esetén mindkettőre alkalmazhatjuk ugyanazt a logikai indexelést:
nparr = np.array([0, 1, 2, 3, 4, 5], dtype=np.uint8)
nparr2 = np.array([100, 101, 102, 103, 104, 105], dtype=np.uint8)
nparr_cond = np.array([False, True, False, False, True, False], dtype=bool)
nparr[nparr_cond] = nparr2[nparr_cond]
print(nparr)
Az eredmény [ 0 101 2 3 104 5], vagyis az nparr tömb a logikai igaz helyeken felveszi az nparr2 tömb ugyanezen helyeken szereplő értékeit. A jobb oldalon önmagában az nparr2 szerepeltetése indexelési hibát okozna, mert a bal és jobb oldalon egyforma méretű adatnak kell szerepelnie.