24

如果我运行以下代码:

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 += cb = b + c,代码运行良好。为什么会这样?我在 RHEL 上运行 Python 2.7.2。

NumPy 版本:2.0.0.dev-a2a9dfb

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

先感谢您。

4

1 回答 1

21

当你这样做时c=c/2**63c会被强制转换为dtype=object(这就是问题),而b留在dtype=float.

当您将dtype=object数组添加到 adtype=float时,结果是一个dtype=object数组。将其视为dtype优先级,就像将 numpy 浮点数添加到 numpy int 时会给出 numpy 浮点数。

如果您尝试将object加到float 就地,它会失败,因为结果不能从objectto 转换float。但是,当您使用类似 的基本加法b=b+c时,结果b将转换为 a dtype=object,您可能已经注意到了。

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

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

于 2012-09-25T18:41:27.477 回答