Python NumPy ブロードキャスティング #2

株式会社リュディアです。今回も引き続き NumPy のブロードキャスティングについてまとめてみます。

前回までの NumPy のブロードキャスティング のまとめへのリンクは以下を参考にしてください。

前回は用語や概念についてのまとめでしたのでわかりづらかったと思います。今回は具体的なコードと実行結果を見ていきます。NumPy のブロードキャスティングの基本は形状の異なる ndarray の演算を NumPy が扱う、ただし制限はあるということです。

では、以下の例を見てください。

画像1

5 x 3 の 2次元配列とスカラー 20 の足し算をしたいわけです。数学的にもこれは扱えないですしどうすべきか規定する必要があります。NumPy では 2次元配列の全要素にスカラー 20を加算するように振る舞います。つまり以下ように動作します。

画像2

コードと実行結果も以下につけておきます。

import numpy as np

np_x = np.arange(15).reshape(5,3)
np_y = 20
print(np_x)
print(np_y)

print(np_x + np_y)

#
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]
#  [12 13 14]]
#
# 20
#
# [[20 21 22]
#  [23 24 25]
#  [26 27 28]
#  [29 30 31]
#  [32 33 34]]
#

どうでしょうか。便利ですよね。では他の例も見ていきましょう。次の例の実行結果はどうなると思いますか?

画像3

動作を予測してみてから以下のコードと実行結果をみてください。

import numpy as np

np_x = np.arange(15).reshape(5,3)
np_y = np.array([20, 30, 40, 50, 60]).reshape(5, 1)
print(np_x)
print(np_y)

print(np_x + np_y)

#
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]
#  [12 13 14]]
#
# [[20]
#  [30]
#  [40]
#  [50]
#  [60]]
#
# [[20 21 22]
#  [33 34 35]
#  [46 47 48]
#  [59 60 61]
#  [72 73 74]]
#

予測と合致しましたか?以下のように振る舞いましたね。

画像4

1列しかないものを3つの列にそれぞれ適用したイメージです。では次の例ではどうなるでしょうか?

画像5

以下にコードと実行結果をつけます。

import numpy as np

np_x = np.arange(15).reshape(5,3)
np_y = np.array([20, 30, 40])
print(np_x)
print(np_y)

print(np_x + np_y)

#
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]
#  [12 13 14]]
#
# [20 30 40]
#
# [[20 31 42]
#  [23 34 45]
#  [26 37 48]
#  [29 40 51]
#  [32 43 54]]
#

動きは以下のようになりましたね。

画像6

今回はブロードキャスティングでうまく動作する例をつけました。感覚的にブロードキャスティングの動作をつかんで頂けたと思います。

ちなみに加算の例のみをつけていますが、四則演算すべてにおいて動作は同じです。そのため今後も加算のみを例として使っていきます。

Python NumPy ブロードキャスティング に関するまとめの続きは以下からどうぞ。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?