Nad matrikami dtipa bool lahko izvajamo logične
operacije. Uporabiti moramo Pythonove operatorje za delo nad biti,
&, |,^in~`.
import numpy as np
a = np.array([[True, True, False],
[False, False, True]])
b = np.array([[False, True, True],
[True, False, True]])a & barray([[False, True, False],
[False, False, True]])
a | barray([[ True, True, True],
[ True, False, True]])
a ^ barray([[ True, False, True],
[ True, False, False]])
~aarray([[False, False, True],
[ True, True, False]])
Isti operatorji delajo tudi s tabelami int-ov, kjer res
delajo z biti, kot običajno v Pythonu.
e = np.array([3, 7, 8])
f = np.array([5, 1, 1])e | farray([7, 7, 9])
e & farray([1, 1, 0])
e ^ farray([6, 6, 9])
Poiščimo vse elemente e, ki so manjši od istoležnih
elementov f ali pa so večji od 7.
(e < f) | (e > 7)array([ True, False, True])
Da, in kateri so? Tile:
e[(e < f) | (e > 7)]array([3, 8])
Pazite na oklepaje: | ima višjo prioriteto kot
<.
any in allFunkciji np.any in np.all sta podobni
Pythonovima any in all, le da znata iti še po
oseh.
barray([[False, True, True],
[ True, False, True]])
np.all(b, axis=0)array([False, False, True])
np.any(b, axis=0)array([ True, True, True])
Tole vam bo prišlo prav pri 11 Dumbo Octopus.
Glavni trik je tule. Razmislite, kaj počnemo tule:
a = np.array([3, 5, 2, 1, 6])
b = np.array([False, False, True, True, False])
a[:-1] += b[1:]
aarray([3, 6, 3, 1, 6])
S tem trikom boste lahko prištevali 1 k sosedom. Če
torej sprogramirate pravilno, ne boste nikoli naredili zanke prek
elementov tabele. Imeli boste zanko, ki se bo ponavljala, dokler se
zasveti kaka nova hobotnica, in potem, najbrž, zanko ali zanki, ki bosta
šli prek osmih ali devetih sosednjih polj. Najbrž si boste hoteli
pripraviti še dve tabeli - eno z vsemi hobotnicami, ki so se zasvetile v
tem koraku in eno z vsemi, ki so se zasvetile pravkar, znotraj
"podkoraka".
Dovolj spoilerjev. :)