Numpy array演算操作メモ

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]

テンソル

もういちどだけ内積・外積 [物理のかぎしっぽ] テンソル積については別にまとめる必要がある。