array クラス (ndarray と言うのか? N dimensional array から来ているそうだ) はいわゆる配列であるらしい。
array() は array 型のデータ (array クラスのインスタンスというのか?) を作れる。
array() の引数にリストを指定すると, そのリストの成分を持つ array が出来る。
>>> from numpy import *
>>> array([1,2,3])
array([1, 2, 3])
>>> array(range(1,4))
array([1, 2, 3])
>>> array([[1,2,3],[2,3,4]])
array([[1, 2, 3],
[2, 3, 4]])
|
あるいは
>>> import numpy as np >>> np.array([1,2,3]) >>> np.array(range(1,4)) >>> np.array([[1,2,3],[2,3,4]]) |
成分は a[
,
] でアクセス出来る。
C言語の配列のように 0 から始まることに注意する。
>>> a=array([[1,2],[3,4]])
>>> a
array([[1, 2],
[3, 4]])
>>> a[1,1]=5
>>> a
array([[1, 2],
[3, 5]])
|
単なる代入 b=a は, 「参照による代入」であり, 別名がつくだけでコピーされるわけでなく, ソースを変更するとデスティネーションも変更される。 b を a のコピーにするには, 明示的に b=a.copy() とする。
>>> a=array([[1,2],[3,4]])
>>> b=a
>>> a[0,0]=10
>>> a
array([[10, 2],
[ 3, 4]])
>>> b
array([[10, 2],
[ 3, 4]])
b=a とした場合,
a をいじったら,b も変わってしまいました。
>>> b=a.copy()
>>> a[0,0]=1
>>> a
array([[1, 2],
[3, 4]])
>>> b
array([[10, 2],
[ 3, 4]])
b=a.copy() とした場合,
a をいじっても,b は変わらない。
|
array というクラスを用意したのは,もちろん実行効率上の理由も大きいだろう。
Mathematia のリストは, 行列やベクトルを表すのに使えるが, Python のリストでは全然無理 (スカラー倍すら出来ない)。 Python の array は,加法やスカラー倍は自然に出来る。
しかし array の掛け算 * は成分毎の積になる。 内積や行列としてのを計算するには dot() を用いるか (この辺は Mathematica のドット演算子 . を想起させる), 後で紹介する matrix にする必要がある。 array クラスは,次元が1,2より大きいものも使える, つまりベクトル・行列向けに特殊化せずに一般的である,ということだ。 この辺はなるほどと思う。
| 論よりラン |
>>> 2*[1,2,3] [1, 2, 3, 1, 2, 3] >>> 2*array([1,2,3]) array([2, 4, 6]) >>> array([1,2,3])+array([2,4,6]) array([3, 5, 7]) >>> array([1,2,3])*array([2,4,6]) array([2, 8, 18]) >>> dot(array([1,2,3]),array([2,4,6])) 28 |
reshape() でサイズを変更できる。
>>> a=array([1,2,3,4])
>>> reshape(a,(2,2))
array([[1, 2],
[3, 4]])
>>> a.reshape(2,2)
array([[1, 2],
[3, 4]])
|