O numpy
-ju se nam za to nalogo ni potrebno naučiti
ničesar novega. Samo spomnimo se: tabele imajo lahko poljubno število
dimenzij. Lahko tudi tri.
import numpy as np
= np.array([[[5, 1, 8, 6],
a 4, 5, 3, 12]],
[
5, 3, 1, 1],
[[7, 5, 5, 4]],
[
1, 3, 6, 3],
[[9, 1, 8, 2]]
[ ])
a.shape
(3, 2, 4)
Tudi takšne tabele lahko indeksiramo z vsemi triki, ki smo jih spoznali, vključno s seznami in z maskami, ki morajo biti tudi v tem primeru enakih dimenzij kot tabele.
a
array([[[ 5, 1, 8, 6],
[ 4, 5, 3, 12]],
[[ 5, 3, 1, 1],
[ 7, 5, 5, 4]],
[[ 1, 3, 6, 3],
[ 9, 1, 8, 2]]])
== 5] -= 1
a[a
a
array([[[ 4, 1, 8, 6],
[ 4, 4, 3, 12]],
[[ 4, 3, 1, 1],
[ 7, 4, 4, 4]],
[[ 1, 3, 6, 3],
[ 9, 1, 8, 2]]])
Takšna matrika ima tri osi. Da se bomo lažje pogovarjali, recimo, da ta tabela vsebuje tri matrike; vsaka ima dve vrstici in štiri stolpce.
Ničta os so matrike (shape
je (3, 2, 4); prva os gre
torej čez tri stvari). Če seštevamo po njej, seštevamo istoležne
elemente.
sum(a, axis=0) np.
array([[ 9, 7, 15, 10],
[20, 9, 15, 18]])
Druga os so vrstice (torej: vrstici) znotraj teh matrik. Če seštevamo po njej, torej po vrsticah, seštejemo stolpce vsake matrike. Vsaka vrstica te vsote ustreza eni od matrik, stolpci pa seveda ustrezajo stolpcem. Vrstice (tisto, česar je 2), so izginile, ker smo jih izsešteli.
sum(a, axis=1) np.
array([[ 8, 5, 11, 18],
[11, 7, 5, 5],
[10, 4, 14, 5]])
Tretja os so stolpci. Če seštevamo po njih, seštejemo vsako vrstico vsake matrike.
sum(a, axis=2) np.
array([[19, 23],
[ 9, 19],
[13, 20]])
Enako delujejo tudi vse druge funkcije, ki jim kot argument podamo
os, na primer np.min
, np.max
,
np.mean
, np.all
, np.any
...
Predvsem slednji dve boste potrebovali v tej nalogi.
Naloga, ki se je lotite, je naloga 4, Giant Squid.
np.any
in, morda, np.all
ter kakšnim
|
, &
in ~
dobili
enodimenzionalno tabelo bool
-ov, ki bodo povedali, kateri
listki so zmagali.Nalogo jemljite kot vajo iz razmišljanja o oseh.