如果我运行以下代码:
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)
提前谢谢你。
当你做
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.**63
将c
保持为浮点数,b+=c
按预期工作。注意,如果c
是np.ones(1)
,您也不会有问题。无论如何,
(np.array([0], dtype=float)/2**63)).dtype == np.dtype(object)
很可能是一个bug。相关问题 更多 >
编程相关推荐