对numpy数组使用inplace操作时生成的TypeError?

2024-04-24 05:05:30 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我运行以下代码:

import numpy as np

b = np.zeros(1)
c = np.zeros(1)
c = c/2**63

print b, c
b += c

我收到此错误消息:

TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided
output parameter (typecode 'd') according to the casting rule ''same_kind''

如果我将b += c更改为b = b + c,代码运行正常。为什么会这样?我在RHEL上运行Python2.7.2。

NumPy版本:2.0.0.dev-a2a9dfb

GCC版本:4.1.2 20080704(红帽4.1.2-52)

提前谢谢你。


Tags: to代码import版本numpy消息outputas
1条回答
网友
1楼 · 发布于 2024-04-24 05:05:30

当你做c=c/2**63的时候,c会被转换成dtype=object(这就是问题所在),而b则与dtype=float保持一致。

dtype=object数组添加到dtype=float时,结果是dtype=object数组。把它看作是dtype优先级,就像把numpy float添加到numpy int中会得到numpy float一样。

如果试图将object添加到float中的适当位置,则失败,因为结果无法从object强制转换到float。但是,当您使用像b=b+c这样的基本加法时,结果b将被转换为dtype=object,正如您可能已经注意到的那样。

请注意,使用c=c/2.**63c保持为浮点数,b+=c按预期工作。注意,如果cnp.ones(1),您也不会有问题。

无论如何,(np.array([0], dtype=float)/2**63)).dtype == np.dtype(object)很可能是一个bug。

相关问题 更多 >