【发布时间】:2023-04-03 12:53:01
【问题描述】:
作为 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 *= 操作符来做到这一点?
我应该继承一些东西吗?
【问题讨论】:
-
A *= B仅比mult(A,B)节省了 3 个字符。你能清楚地说明为什么你需要尽可能短的方法吗? -
@SethMMorton:比隐式更好:
*=是所有主要编程语言的标准;必须定义mult函数是不自然的 -
你希望
A在这里结束什么? -
@Eric 因为
A是一个int 数组,而我们确实就地*=,我希望A最后保持一个int。
标签: python arrays numpy subclass