## Logične operacije

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 & b

    array([[False,  True, False],
           [False, False,  True]])

    a | b

    array([[ True,  True,  True],
           [ True, False,  True]])

    a ^ b

    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.

    e = np.array([3, 7, 8])
    f = np.array([5, 1, 1])

    e | f

    array([7, 7, 9])

    e & f

    array([1, 1, 0])

    e ^ f

    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`.

    (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 `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]])

    np.all(b, axis=0)

    array([False, False,  True])

    np.any(b, axis=0)

    array([ True,  True,  True])

## Naloga

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:]
    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. :)