gpt4 book ai didi

python - NumPy 标量、广播和 __iadd__ 方法

转载 作者:行者123 更新时间:2023-11-28 16:40:17 25 4
gpt4 key购买 nike

关于这个奇怪的事情有什么想法吗?

from numpy import *

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

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

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

给出错误“具有形状 () 的不可广播输出操作数与广播形状 (2) 不匹配”。同时

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

给出 array([2,3])。这种行为是否像乍一看那样奇怪?

提前致谢。

最佳答案

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

至于您的第一个测试用例,我的猜测是因为 Python 整数是 immutable对象,每当你 __iadd__ 到一个时,你实际上是在创建一个新对象并指向它,而不是修改你拥有的对象,所以没有理由不应该使用数组。

关于python - NumPy 标量、广播和 __iadd__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20133767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com