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