关于这种奇怪的想法?
from numpy import *
a = array([1,2])
b = 1
b += a
正如您所料,给出array([2,3])
。但是
a = array([1,2])
b = array(1)
b += a
给出错误“shape()的不可广播输出操作数与广播形状(2)不匹配”。同时
a = array([1,2])
b = array(1)
b = b + a
给出array([2,3])
。这种行为是否像第一眼看上去一样奇怪?
提前致谢。
答案 0 :(得分:3)
+=
运算符用于表示“就地求和”。 Numpy对就地的含义施加了一些约束:它不能改变数组的大小或类型。执行b = b + a
时没有问题,因为b
现在指向添加b
和a
所产生的新对象,这是一个长度为2的数组。 b += a
失败并不奇怪,因为长度为2的数组无法适应长度为1的数组。
至于你的第一个测试用例,我的猜测是因为Python int是immutable个对象,每当你__iadd__
到一个对象时,你就是在有效地创建一个新对象并指向它,而不是修改它你拥有的对象,所以没有理由不应该使用数组。