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

时间:2012-09-25 18:29:33

标签: python arrays numpy typeerror

如果我运行以下代码:

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)

提前谢谢。

1 个答案:

答案 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=objectc=c/2.**63保留为浮点数,c按预期工作。请注意,如果b+=cc,您也不会有任何问题。

无论如何:np.ones(1)可能是一个错误。