4

我在 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]

?

4

1 回答 1

7

这是因为arange(5)返回一个整数数组,但nan它是一个浮点值。当您进行常规赋值时,这没关系,因为x + nan透明地转换x为浮点数以进行加法并返回浮点数结果。但是对于+=,它会尝试将此浮点结果放回原来的x,这是一个 int 数组。这失败了,因为 int 数组不能接受浮点数据。

与 numpy 数组一起使用+=会更新数组,如果您的计算结果与原始数据类型不同,这将不起作用。

于 2013-09-08T20:23:56.163 回答