Nad matrikami dtipa bool
lahko izvajamo logične
operacije. Uporabiti moramo Pythonove operatorje za delo nad biti,
&
, |,
^in
~`.
import numpy as np
= np.array([[True, True, False],
a False, False, True]])
[= np.array([[False, True, True],
b True, False, True]]) [
& b a
array([[False, True, False],
[False, False, True]])
| b a
array([[ True, True, True],
[ True, False, True]])
^ b a
array([[ True, False, True],
[ True, False, False]])
~a
array([[False, False, True],
[ True, True, False]])
Isti operatorji delajo tudi s tabelami int
-ov, kjer res
delajo z biti, kot običajno v Pythonu.
= np.array([3, 7, 8])
e = np.array([5, 1, 1]) f
| f e
array([7, 7, 9])
& f e
array([1, 1, 0])
^ f e
array([6, 6, 9])
Poiščimo vse elemente e
, ki so manjši od istoležnih
elementov f
ali pa so večji od 7
.
< f) | (e > 7) (e
array([ True, False, True])
Da, in kateri so? Tile:
< f) | (e > 7)] e[(e
array([3, 8])
Pazite na oklepaje: |
ima višjo prioriteto kot
<
.
any
in all
Funkciji np.any
in np.all
sta podobni
Pythonovima any
in all
, le da znata iti še po
oseh.
b
array([[False, True, True],
[ True, False, True]])
all(b, axis=0) np.
array([False, False, True])
any(b, axis=0) np.
array([ True, True, True])
Tole vam bo prišlo prav pri 11 Dumbo Octopus.
Glavni trik je tule. Razmislite, kaj počnemo tule:
= np.array([3, 5, 2, 1, 6])
a = np.array([False, False, True, True, False])
b -1] += b[1:]
a[: a
array([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. :)