NumPy チュートリアル - NumPy 数学演算とブロードキャスト

胡金庫 2023年1月30日
  1. NumPy 算術演算
  2. NumPy Broadcasting
NumPy チュートリアル - NumPy 数学演算とブロードキャスト

この章では、基本的な算術演算や行列演算など、NumPy での演算について説明します。

基本的な算術演算から始めましょう。

NumPy 算術演算

加算、減算、乗算、除算は、NumPy で最も基本的な算術演算です。これらは、数値間の通常の算術演算に似ています。

import numpy as np

arrayA = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arrayB = arrayA.T
# array([[1, 2, 3],
#       [4, 5, 6],
#       [7, 8, 9]])

arrayB = arrayA.T
# array([[1, 4, 7],
#       [2, 5, 8],
#       [3, 6, 9]])

arrayA + arrayB
# array([[ 2,  6, 10],
#       [ 6, 10, 14],
#       [10, 14, 18]])

arrayA - arrayB
# array([[ 0, -2, -4],
#       [ 2,  0, -2],
#       [ 4,  2,  0]])

arrayA * arrayB
# array([[ 1,  8, 21],
#       [ 8, 25, 48],
#       [21, 48, 81]])

arrayA / arrayB
# array([[1.        , 0.5       , 0.42857143],
#       [2.        , 1.        , 0.75      ],
#       [2.33333333, 1.33333333, 1.        ]])

行列の乗算操作-*は、2つの配列の同じ位置にある要素を乗算して、結果の配列の同じ位置にある要素を取得することに注意してください。np.dot メソッドで計算されるのは、与えられた 2つの配列のドット積ではありません。

np.dot(arrayA, arrayB)
# array([[ 14,  32,  50],
#       [ 32,  77, 122],
#       [ 50, 122, 194]])

NumPy Broadcasting

2つの配列は、配列演算操作で同じ形状にする必要があります。しかし、NumPy は、ブロードキャストの概念を導入して、2つの配列の形状が同じでない場合、可能であれば配列を自動入力します。

この概念を例で説明しましょう。

import numpy as np

arrayA = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arrayA + 1
# array([[ 2,  3,  4],
#       [ 5,  6,  7],
#       [ 8,  9, 10]])

ここでは、arrayA のすべての要素に 1 が追加されます。つまり、1 は形状 (1,1) から同じ形状の arrayA-(3、3 にブロードキャストされます。 ) 配列の追加操作を可能にします。

実際の操作は次のとおりです。

arrayA + np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])

NumPy でのブロードキャストは、以下のシナリオでも使用できますが、

2つの配列は 1つの次元で同じ長さを持ち、1つの配列は他の次元で 1 と同じ長さを持ちます

1つの例から始めましょう。

arrayC = np.array([10, 11, 12])
arrayA + arrayC
# array([[11, 13, 15],
#       [14, 16, 18],
#       [17, 19, 21]])

arryA の形状は (3, 3) であり、arrayC の形状は (3, 1) です。これは配列の次元の基準を満たし、arrayC の単一行のデータは arrayA の形状に一致するように 3 行にブロードキャストされます。

2つの配列の行の長さが同じ場合にも適用できます。

arrayD = np.array([[10], [11], [12]])
# array([[10],
#       [11],
#       [12]])
arrayA + arrayD
# array([[11, 12, 13],
#       [15, 16, 17],
#       [19, 20, 21]])
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook