NumPy★配列の演算処理

2021年10月7日

NumPyでは配列の計算をしてくれる関数が沢山あるのでまとめてみます。

配列要素の総和

sum

配列の要素の総和を計算します。

書き方

sum( x, axis=none )

x計算対象の配列
axis(オプション)計算を行う軸方向
【例】
import numpy as np
x = np.array([[2,6],[5,2],[9,2]])
 
print(np.sum(x))
print(np.sum( x, axis=0 ))
print(np.sum( x, axis=1 ))
【実行結果】
26
[16 10]
[ 8  7 11]

行列(配列)の内積

dot

行列の内積を計算します。

書き方

dot( 内積対象の配列1, 内積対象の配列2 )
※ 内積対象の配列1 の1次元(列)と 内積対象の配列2の0次元(行)は揃えないとエラーになる

【正しい例】
\begin{eqnarray*} \left( \begin{array}{ccc} 1 & 2 & 3 \\ 3 & 4 & 5 \\ \end{array} \right) \left( \begin{array}{cc} 2 & 6 \\ 5 & 2 \\ 9 & 2 \\ \end{array} \right) = \left( \begin{array}{cc} 39 & 16 \\ 71 & 36 \\ \end{array} \right) \end{eqnarray*}
import numpy as np
A = np.array([[1,2,3],[3,4,5]])
B = np.array([[2,6],[5,2],[9,2]])
 
np.dot( A, B )
【実行結果】
array([[39, 16],
       [71, 36]])
【間違った例】
\begin{eqnarray*} \left( \begin{array}{ccc} 1 & 2 & 3 \\ 3 & 4 & 5 \\ \end{array} \right) \left( \begin{array}{cc} 2 & 6 \\ 5 & 2 \\ \end{array} \right) \end{eqnarray*}
列と行の数があっていないので計算が出来ない
import numpy as np
A = np.array([[1,2,3],[3,4,5]])
B = np.array([[2,6],[5,2]])
 
np.dot( A, B )
【実行結果】
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-6e969e5a1fdd> in <module>
      3 B = np.array([[2,6],[5,2]])
      4 
----> 5 np.dot( A, B )

ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)

matmul

行列の内積を計算します。

書き方

matmul( 内積対象の配列1, 内積対象の配列2 )
※ dot同様、内積対象の配列1 の1次元(列)と 内積対象の配列2の0次元(行)は揃えないとエラーになる
matmul 詳細

【例】
import numpy as np
A = np.array([[1,2,3],[3,4,5]])
B = np.array([[2,6],[5,2],[9,2]])
 
np.matmul( A, B )
【実行結果】
array([[39, 16],
       [71, 36]])

dotとmatmulの違い

dotはブロードキャストルールが適用されるが、matmulは適用されない。

【例】dotのブロードキャスト計算
import numpy as np
A = np.array([[1,2,3],[3,4,5]])
B = 3
 
np.dot( A, B )
【実行結果】
array([[ 3,  6,  9],
       [ 9, 12, 15]])
【例】matmulのブロードキャスト計算(エラーになります)
import numpy as np
A = np.array([[1,2,3],[3,4,5]])
B = 3
 
np.matmul( A, B )
【実行結果】
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-10-5186ed64db1f> in <module>
      3 B = 3
      4 
----> 5 np.matmul( A, B )

ValueError: matmul: Input operand 1 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)

統計値の計算

mean 平均値

配列の平均値を計算します。

書き方

mean( a, axis=none )

a計算対象の配列
axis(オプション)計算を行う軸方向

mean 詳細

【例】
import numpy as np
 
x = np.array([[3,4],[5,6]])
print( np.mean(x) )
print( np.mean(x, axis=0) )
print( np.mean(x, axis=1) )
【実行結果】
4.5
[4. 5.]
[3.5 5.5]

std 標準偏差

配列の標準偏差を計算します。

書き方

std( a, axis=none )

a計算対象の配列
axis(オプション)計算を行う軸方向

std 詳細

【例】
import numpy as np
 
a = np.array([1,2,3,4])
np.std(a)
【実行結果】
1.118033988749895

配列の真理値

any

配列の値が一つでも条件に当てはまればTrueを返す。

書き方

any( a, axis )

a配列
axis(オプション)軸方向

any 詳細

【例】
import numpy as np
 
a = np.random.randint(0,10,(2,3))
print(a)
np.any(a<3)
【実行結果】
[[4 0 1]
 [9 5 2]]

True

all

配列の全ての値が条件に当てはまればTrueを返す。

書き方

all( a, axis )

a配列
axis(オプション)軸方向

all 詳細

【例】
import numpy as np
 
a = np.random.randint(0,10,(2,3))
print(a)
np.all(a<3)
【実行結果】
[[0 8 0]
 [7 0 3]]

False

NumPy

Posted by Bright_Noah