『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

【NumPy】配列の演算規則

配列の演算規則

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

# PYTHON_NUMPY_OPERATION_RULE

# In[1]

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]]

コメント