如果我运行以下代码:
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上运行Python 2.7.2。
NumPy版本:2.0.0.dev-a2a9dfb
GCC版本:4.1.2 20080704(Red Hat 4.1.2-52)
提前谢谢。
答案 0 :(得分:12)
当您执行c=c/2**63
时,c
会被转换为dtype=object
(这就是问题),而b
仍会保留dtype=float
。
将dtype=object
数组添加到dtype=float
时,结果为dtype=object
数组。可以将其视为dtype
优先级,就像将numpy浮点数添加到numpy int时给出一个numpy浮点数。
如果您尝试将object
添加到float
到位,则会失败,因为结果无法从object
投射到{ {1}}。但是,当您使用float
之类的基本添加时,结果b=b+c
会转换为b
,您可能已经注意到了。
请注意,使用dtype=object
将c=c/2.**63
保留为浮点数,c
按预期工作。请注意,如果b+=c
为c
,您也不会有任何问题。
无论如何:np.ones(1)
可能是一个错误。