numpy の行列の各要素へのアクセス方法をいろいろと試した。
まず、numpyを読み込んで、npという名前でアクセスできるようにする。
>>> import numpy as npさらに、行列Mを作成する。
>>> M=np.matrix([[1,2,3],[4,5,6],[7,8,9]])1行目1列目が1、1行目2列目が2である。
2行目を表示する。
>>> print M[1] [[4 5 6]]
2行目3列目の値を表示する。
>>> print M[1,2] 6
以降、i行列j列目を(i,j)と書くこととする。
(3,2)と(1,2)の成分を取り出す。
>>> print M[[2,0],[1,1]] [[8 2]](3,1)と(2,2)の成分を取り出すわけではないことに注意。
(1,3)と(2,2)、(3,1)の成分を取り出す。
>>> print M[[0,1,2],[2,1,0]] [[3 5 7]]
(2,3)と(2,2)、(2,1)の成分を取り出す。
>>> print M[[1,1,1],[2,1,0]] [[6 5 4]]省略して書くこともできる。
>>> print M[1,[2,1,0]] [[6 5 4]]これも同様。
>>> print M[[1],[2,1,0]] [[6 5 4]]
次の書き方はエラーとなる。
>>> print M[[1,2],[2,1,0]] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/pymodules/python2.7/numpy/matrixlib/defmatrix.py", line 305, in __getitem__ out = N.ndarray.__getitem__(self, index) ValueError: shape mismatch: objects cannot be broadcast to a single shape
(3,2)と(2,2)、(1,2)の成分を取り出す。
>>> print M[[2,1,0],[1,1,1]] [[8 5 2]]
同様に省略できるが、形式が変わる。
>>> print M[[2,1,0],1] [[8] [5] [2]]
次の3つはすべて同じ結果となる。
>>> print M[[2],1] [[8]] >>> print M[[2],[1]] [[8]] >>> print M[2,[1]] [[8]]
しかし、[]が[]内にないと、スカラーの値が表示される。
>>> print M[2,1] 8
次の2つは同じ。
>>> print M[np.arange(3),np.arange(3)] [[1 5 9]] >>> print M[[0,1,2],[0,1,2]] [[1 5 9]]
1行目と2行目を取り出す。
>>> print M[[0,1]] [[1 2 3] [4 5 6]]
転置をとる。
>>> print M.T [[1 4 7] [2 5 8] [3 6 9]]