Python 3 において,
import numpy as np
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
a[1, :] += 3
a[1, :] -= 3
a[1, :] *= 3
は問題ないが,
a[1, :] /= 3
はエラーを生じる
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
----> 1 a[1, :] /= 3
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide
ベクトルの場合も同じ。
b = np.array([1, 3, 7])
b += 10
b -= 10
b *= 10
は問題ないが,
b /= 10
はエラーを生じる
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
----> 1 b /= 10
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide
a /= 3 は a = np.true_divide(a, 3) とは違うということが問題の本質。
それはさておき
これを回避するには,np.array() で dtype=float を指定する
a = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype=float)
a[1, :] /= 3
a
b = np.array([1, 3, 7], dtype=float)
b /= 10
b
または,dtype=float となるように,少なくとも一つの数値を小数点付きで指定する
a = np.array([[1.0,2,3], [4,5,6], [7,8,9]])
a[1, :] /= 3
a
b = np.array([1.0, 3, 7])
b /= 10
b