NumPy配列でのベクトル計算 2015/05/25
同じ次元・同じ大きさのndarray同士の四則演算を書くと、その要素ごとに演算して新しいndarrayを生成してくれる。これをベクトル計算という。
このベクトル計算はNumPyのndarrayの大きな特徴の1つである。 NumPyの中では実際にはC言語で実装されたループ処理であるので、配列をPythonのループで回すよりも、配列を高速に処理することができる。
四則演算だけではなく数値の比較の演算子 <
, >=
なども使える。
三角関数などさまざまな計算処理をndarrayに対して実行することもできるが、それはユニバーサル関数というもので行う。
関連
四則演算や数値比較のベクトル計算 2015/05/25
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]]
ブロードキャスト 2015/05/02
一方の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.]]