我在python 2.7.3中看到了这一点,包括pylab和numpy。为什么:
>>> x = pylab.arange(5)
>>> x = x + pylab.nan
>>> print x
[ nan nan nan nan nan]
与此不同:
>>> x = pylab.arange(5)
>>> x += pylab.nan
__main__:1: RuntimeWarning: invalid value encountered in add
>>> print x
[-9223372036854775808 -9223372036854775808 -9223372036854775808
-9223372036854775808 -9223372036854775808]
答案 0 :(得分:7)
因为arange(5)
返回一个整数数组,但nan
是一个浮点值。当你是常规赋值时,这是可以的,因为x + nan
透明地将x
转换为float来执行添加并返回float结果。但是对于+=
,它会尝试将此float结果放回原始的x
,这是一个int数组。这失败了,因为int数组不能接受浮点数据。
将+=
与numpy数组一起使用会更新数组,如果计算结果的数据类型与原始数据类型不同,则无法正常工作。