Python NumPy ブロードキャスティング #2
株式会社リュディアです。今回も引き続き NumPy のブロードキャスティングについてまとめてみます。
前回までの NumPy のブロードキャスティング のまとめへのリンクは以下を参考にしてください。
前回は用語や概念についてのまとめでしたのでわかりづらかったと思います。今回は具体的なコードと実行結果を見ていきます。NumPy のブロードキャスティングの基本は形状の異なる ndarray の演算を NumPy が扱う、ただし制限はあるということです。
では、以下の例を見てください。
5 x 3 の 2次元配列とスカラー 20 の足し算をしたいわけです。数学的にもこれは扱えないですしどうすべきか規定する必要があります。NumPy では 2次元配列の全要素にスカラー 20を加算するように振る舞います。つまり以下ように動作します。
コードと実行結果も以下につけておきます。
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]]
#
どうでしょうか。便利ですよね。では他の例も見ていきましょう。次の例の実行結果はどうなると思いますか?
動作を予測してみてから以下のコードと実行結果をみてください。
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]]
#
予測と合致しましたか?以下のように振る舞いましたね。
1列しかないものを3つの列にそれぞれ適用したイメージです。では次の例ではどうなるでしょうか?
以下にコードと実行結果をつけます。
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]]
#
動きは以下のようになりましたね。
今回はブロードキャスティングでうまく動作する例をつけました。感覚的にブロードキャスティングの動作をつかんで頂けたと思います。
ちなみに加算の例のみをつけていますが、四則演算すべてにおいて動作は同じです。そのため今後も加算のみを例として使っていきます。
Python NumPy ブロードキャスティング に関するまとめの続きは以下からどうぞ。
では、ごきげんよう。