作为mentioned here和 here ,这在 numpy 1.7+ 中不再有效:
import numpy
A = numpy.array([1, 2, 3, 4], dtype=numpy.int16)
B = numpy.array([0.5, 2.1, 3, 4], dtype=numpy.float64)
A *= B
解决方法是:
def mult(a,b):
numpy.multiply(a, b, out=a, casting="unsafe")
def add(a,b):
numpy.add(a, b, out=a, casting="unsafe")
mult(A,B)
但是对于每个矩阵操作来说写起来太长了!
如何覆盖 numpy *=
运算符以默认执行此操作?
我应该继承一些东西吗?
最佳答案
您可以使用np.set_numeric_ops
来覆盖数组运算方法:
import numpy as np
def unsafe_multiply(a, b, out=None):
return np.multiply(a, b, out=out, casting="unsafe")
np.set_numeric_ops(multiply=unsafe_multiply)
A = np.array([1, 2, 3, 4], dtype=np.int16)
B = np.array([0.5, 2.1, 3, 4], dtype=np.float64)
A *= B
print(repr(A))
# array([ 0, 4, 9, 16], dtype=int16)
关于python - 在 numpy 中重新定义 *= 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673878/