NumPy标量、广播和__iadd_方法



对此有什么想法吗?

from numpy import *
a = array([1,2])
b = 1
b += a

如您所料,给出array([2,3])。但是

a = array([1,2])
b = array(1)
b += a

给出错误"shape()不可广播的输出操作数与广播shape(2)不匹配"。同时

a = array([1,2])
b = array(1)
b = b + a

给出CCD_ 2。这种行为和乍一看一样奇怪吗?

提前谢谢。

+=运算符表示"就地求和"。Numpy对就地意味着什么施加了一些限制:它不能更改数组的大小或数据类型。执行b = b + a时没有问题,因为b现在指向添加了ba的新对象,这是一个长度为2的数组。b += a失败并不奇怪,因为长度2的数组无法拟合到长度1的数组中。

至于您的第一个测试用例,我的猜测是,由于Python int是不可变的对象,所以无论何时__iadd__到1,您都有效地创建了一个新对象并指向它,而不是修改您拥有的对象,因此没有理由不使用数组。

相关内容

最新更新