NumPy配列でのベクトル計算

同じ次元・同じ大きさのndarray同士の四則演算を書くと、その要素ごとに演算して新しいndarrayを生成してくれる。これをベクトル計算という。

このベクトル計算はNumPyのndarrayの大きな特徴の1つである。 NumPyの中では実際にはC言語で実装されたループ処理であるので、配列をPythonのループで回すよりも、配列を高速に処理することができる。

四則演算だけではなく数値の比較の演算子 <, >= なども使える。

三角関数などさまざまな計算処理をndarrayに対して実行することもできるが、それはユニバーサル関数というもので行う。

関連

四則演算や数値比較のベクトル計算

ndarr1 = np.array([[1., 2., 3.], [4., 5., 6.]])
ndarr2 = np.array([[10., 20., 30.], [40., 50., 60.]])

print(ndarr1 + ndarr2)
# 出力結果
# [[ 11.  22.  33.]
#  [ 44.  55.  66.]]

print(ndarr1 - ndarr2)
# 出力結果
# [[ -9. -18. -27.]
#  [-36. -45. -54.]]

print(ndarr1 * ndarr2)
# 出力結果
# [[  10.   40.   90.]
#  [ 160.  250.  360.]]

print(ndarr1 / ndarr2)
# 出力結果
# [[ 0.1  0.1  0.1]
#  [ 0.1  0.1  0.1]]

print(ndarr1 % 2 == 0)
# 出力結果
# [[False  True False]
#  [ True False  True]]

print(ndarr1 + 20 > ndarr2)
# 出力結果
# [[ True  True False]
#  [False False False]]

print(ndarr1 >= 3)
# 出力結果
# [[False False  True]
#  [ True  True  True]]

ブロードキャスト

一方のndarrayの特定の軸の大きさが1の場合はブロードキャストという。以下はいろいろなブロードキャストの例。

一方のndarrayの内側の軸が大きさ1の例

ndarr1 = np.array([[1], [2]])
ndarr2 = np.array([[10., 20., 30.], [40., 50., 60.]])

print(ndarr1 + ndarr2)
# 出力結果
# [[ 11.  21.  31.]
#  [ 42.  52.  62.]]

一方のndarrayの外側の軸が大きさ1の例

ndarr1 = np.array([[1, 2, 3]])
ndarr2 = np.array([[10., 20., 30.], [40., 50., 60.]])

print(ndarr1 + ndarr2)
# 出力結果
# [[ 11.  22.  33.]
#  [ 41.  52.  63.]]

一方のndarrayの両方の軸が大きさ1の例

ndarr1 = np.array([[1]])
ndarr2 = np.array([[10., 20., 30.], [40., 50., 60.]])

print(ndarr1 + ndarr2)
# 出力結果
# [[ 11.  21.  31.]
#  [ 41.  51.  61.]]

一方がndarrayではなく単なるスカラーでもよい。

ndarr2 = np.array([[10., 20., 30.], [40., 50., 60.]])

print(1 + ndarr2)
# 出力結果
# [[ 11.  21.  31.]
#  [ 41.  51.  61.]]

1つ目のndarrayは外側の軸が大きさ1で、2つ目のndarrayは内側の軸が大きさ1の例

ndarr1 = np.array([[1., 2., 3.]])
ndarr2 = np.array([[10.], [20.]])

print(ndarr1 + ndarr2)
# 出力結果
# [[ 11.  12.  13.]
#  [ 21.  22.  23.]]
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。