numpyの多次元配列の扱いではまったところ
numpyの多次元配列の要素にアクセスするのにa[i][j]って書くのとa[i, j]って書くのの違いを区別してなかったせいではまった。
それぞれの挙動を見てみると、
>>> a = np.array([[1, 2], [3, 4], [5, 6]]) >>> a[1][1] 4 >>> a[1, 1] 4
この場合は結果は同じになるので、今まであまり違いを意識したことはなかった。今回問題になったのはつぎのような場合。
>>> a[:][1] array([3, 4]) >>> a[:, 1] array([2, 4, 6])
a[i][j]って書くと、aのi番目の配列a[i]をとってきて、a[i]のj番目の要素にアクセスするので、a[:][1]ならば、a[:](= a)をとってきて、その1番目の要素にアクセスするので結局a[1]が得られる。
一方a[i, j]って書くと、aのi行j列の要素にアクセスするので、a[:, 1]ならば、全部の行の1列目の要素が得られる。
なるほどなぁって思ったのでメモ_φ(・_・