Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

NumPyの使い方(1) 配列の生成

NumPyの使い方について。
 

NumPyとは

・NumPy: numerical pythonの略。科学技術計算の基盤となるパッケージ
・多次元配列オブジェクト ndaaryay(N-dimensional array)
・高速演算
・ファイルの読み書き
線形代数フーリエ変換、乱数
・C、C++FORTRANのコートとpythonを結合、統合するツール
 
配列をメモリの連続領域に保持している。
ndarrayクラスは同じ型の要素だけを含む。
import numpy as np という形でインポートする。
 

ndarrayの基本属性

dtype: データの型
ndim: 次元数(ネストの深さ)
shape: (行数, 列数)のタプル
size: 全要素数

import numpy as np

arr1 = np.array([[1, 2, 3], [4, 5, 6]])
print(type(arr1)) # <class 'numpy.ndarray'>
print(arr1)       # [[1 2 3]
                  #  [4 5 6]]

print(arr1.dtype) # int32
print(arr1.ndim)  # 2
print(arr1.shape) # (2, 3)
print(arr1.size)  # 6

 

ndarrayの生成

np.array(seq) seq:list, tupleなど
np.asarray(seq) array()と同様。ただし、seqがndarrayなら同一オブジェクトへの参照
np.zeros([2, 3]) 2行、3列のゼロ行列。zeros( (2, 3) )でも。
np.zeros_like(seq) seqの同形(shape)かつ同型(dtype)のゼロ行列
np.ones( (2, 3) ) 2行、3列の1で埋めた行列
np.ones_like(a) aと同じshapeで1埋めをする。
np.empty() ゼロ埋めではなく、メモリ確保をするだけで、値は不定。
np.empty_like(a)
np.arange() range()同様の等差数列
np.linspace(1, 2, 5) 初項1、末項2、項数5の等差数列
np.eye(3) 単位行列から一部を切り抜いたもの、np.eye(3, 2)のように正方行列でなくても。
np.identity 単位行列
np.ndarray.fill(value) 数値埋め

 

arr1 = np.array([1, 2, 3])
arr2 = np.asarray(arr1) # arr1と同一オブジェクト
arr3 = np.array(arr1)   # arr1とは別オブジェクト

arr2[1]=10
print(arr1, arr2, arr3)  # [ 1 10  3] [ 1 10  3] [1 2 3]

a1 = np.zeros(5)
print(a1)  # [ 0.  0.  0.  0.  0.]

a2 = np.zeros([2, 5])
print(a2)
# [[ 0.  0.  0.  0.  0.]
#  [ 0.  0.  0.  0.  0.]]


print(np.ones([2, 3, 4]))  # 3次元の配列(テンソル)
# [[[ 1.  1.  1.  1.]
#   [ 1.  1.  1.  1.]
#   [ 1.  1.  1.  1.]]
#
#  [[ 1.  1.  1.  1.]
#   [ 1.  1.  1.  1.]
#   [ 1.  1.  1.  1.]]]

a3 = np.empty(4)
print(a3)
# [   0.        0.      262.6525  252.84  ]

a4 = np.arange(5)
print(a4)  # [0 1 2 3 4]

print(np.identity(3))
# [[ 1.  0.  0.]
#  [ 0.  1.  0.]
#  [ 0.  0.  1.]]

a3.fill(100)
print(a3)  # [ 100.  100.  100.  100.]

 
※1次元ndarray(ベクトル)は縦横をnp自身が臨機応変に使い分けるが、
 自分で指定するときは2次元配列にする。
 横ベクトル[ [1, 2, 3] ]、 縦ベクトル[[1], [2], [3]]