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