目次
配列の演算規則
この記事では 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]]
コメントを書く