对此有什么想法吗?
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
现在指向添加了b
和a
的新对象,这是一个长度为2的数组。b += a
失败并不奇怪,因为长度2的数组无法拟合到长度1的数组中。
至于您的第一个测试用例,我的猜测是,由于Python int是不可变的对象,所以无论何时__iadd__
到1,您都有效地创建了一个新对象并指向它,而不是修改您拥有的对象,因此没有理由不使用数组。