numpy arrayの演算操作についての自分用メモ
numpy arrayのサイズ
numpyにおけるarrayのサイズはなかなか直感的に理解するまで時間がかかると思う。
ベクトルとそれ以外でとりあえず分ければよいのだなと感じた.
import numpy as np a = np.array([1]) a.shape # (1,) b = np.array([1,2]) b.shape # (2,) c = np.array([[1]]) c.shape # (1, 1) d = np.array([[0], [2]]) d.shape # (2, 1)
転置
a = np.zeros((3,7)) at = a.T print(at.shape) # (7, 3)
ただし以下のようにnumpyでは列ベクトルと行ベクトルを意識していない。
そのため、転置はされない。
x = np.zeros(10) xt = x.T print(xt.shape) # (10,)
スライス
a = np.array([[1,2],[3,4],[5,6]]) print(a[0]) # [1 2] print(a[::-1]) # [[5 6] # [3 4] # [1 2]] print(a[:,::-1]) # [[2 1] # [4 3] # [6 5]] print(a[::-1, ::-1]) # [[6 5] # [4 3] # [2 1]]
Advanced Indexing
Advanced indexingには2つ種類がある。
Integer array indexing
抽出する行と列を別々に指定するのがAdvanced indexingと理解
x = np.array([[1,2], [3,4], [5,6]]) print(x) # [[1 2] # [3 4] # [5 6]] print(x[[0,1,2], [0,1,0]]) # [1 4 5] print(x[[0]]) # [[1 2]] print(x[[0,1],[1]]) # [2 4]
Boolean array indexing
x = np.array([1, -1, -2, 3]) print(x[x < 0]) # [-1 -2] x[x<0] += 20 print(x) # [ 1 19 18 3]
集約演算
# 集約演算 x = np.array([[1,2], [3,4], [5,6]]) print(x) # [[1 2] # [3 4] # [5 6]] print(x.sum()) # 21 print(x.sum(axis=0)) # [0,:]と[1,:]と[2,:]の和 # [ 9 12] print(x.sum(axis=1)) # [:,0]と[:,1]の和 # [ 3 7 11]
テンソル積
もういちどだけ内積・外積 [物理のかぎしっぽ] テンソル積については別にまとめる必要がある。