[NumPy] 配列の演算規則

[NumPy] 配列の演算規則

配列の演算規則

 この記事では NumPy 配列 の基本的な 演算規則 を解説します。準備として 2 × 2 の配列 x を生成しておきます。

# PYTHON_NUMPY_OPERATION_RULE

# In[1]

# NumPyをインポート
import numpy as np

# 2×2の配列を作成
x = np.array([[1, 2],
              [3, 4]])

print(x)
[[1 2]
 [3 4]]

 配列 (ndarrayオブジェクト) + 1 という操作は、配列の全要素に 1 を加えることを意味します。

# In[2]

# 配列xに1を加える
print(x + 1)
[[2 3]
 [4 5]]

 同様に引き算や掛け算、割り算も全ての要素に作用します。

# In[3]

# 配列xから1を引く
print(x - 1)
[[0 1]
 [2 3]]
# In[4]

# 配列xに2を掛ける
print(x * 2)
[[2 4]
 [6 8]]
# In[5]

# 配列xを2で割る
print(x / 2)
[[0.5 1. ]
 [1.5 2. ]]

 割り算を実行したときに、一部の要素は小数点を含む数値となります。このとき他の要素もすべて浮動小数点数型 (float) に揃えられます。ndarrayオブジェクトは異なる型の要素をもつことができないからです。
 
 numpy.ones() を使って、x と同じ形をした配列 y を定義します。

# In[6]

# 全要素が2の配列yを作成
y = 2 * np.ones(4, dtype = int).reshape(2, 2)

print(y)
[[2 2]
 [2 2]]

 配列同士の演算同じインデックスの要素同士 で実行されます。

# In[7]

# 配列の加算
print(x + y)
[[3 4]
 [5 6]]
# In[8]

# 配列の減算
print(x - y)
[[-1 0]
 [ 1 2]]
# In[9]

# 配列の積
print(x * y)
[[2 4]
 [6 8]]
# In[10]

# 配列の除算
print(x / y)
[[0.5 1. ]
 [1.5 2. ]

 配列のべき乗・切り捨て除算・剰余算も同じインデックスの要素同士で実行されます。

# In[11]

# 配列のべき乗
print(x ** y)
[[ 1 4]
 [ 9 16]]
# In[12]

# 配列の切り捨て除算
print(x // y)
[[0 1]
 [1 2]]
# In[13]

# 配列の剰余算
print(x % y)
[[1 0]
 [1 0]]

 


 NumPy には線型代数学という分野で扱われる 行列積 を実行するメソッド x.dot(y) が用意されています (x と y は任意の配列)。たとえば 2 × 2 の行列同士の行列積は
 
\[AB=\begin{pmatrix}a & b\\ c & d\end{pmatrix}\begin{pmatrix}e & f\\ g & h\end{pmatrix}=
\begin{pmatrix}ae+bg & af+bh\\ ce+dg & cf+dh\end{pmatrix}\]
のように定義されています。NumPy で行列積
 
\[\begin{pmatrix}1 & 2\\ 3 & 4\end{pmatrix}\begin{pmatrix}1 & 2\\ 2 & 1\end{pmatrix}\]
を計算させてみましょう。

# In[14]
# dot()メソッドによる行列積の計算

a = np.array([[1, 2],
              [3, 4]])

b = np.array([[1, 2],
              [2, 1]])

# 行列積abを計算
print(a.dot(b))
[[ 5 4]
 [11 10]]

 Python 3.5 以降では @ 演算子を使って行列積を計算できるようになりました。

# In[8]
# @演算子による行列積の計算
print(a @ b)
[[ 5 4]
 [11 10]]