scipy.signal.detrend中的不准确/随机性

时间:2013-10-22 07:20:23

标签: python scipy

为什么scipy.signal.detrend对同一数据的结果略有不同?此外,它似乎给出不同的结果取决于是否包含关键字“线性”(默认情况下,趋势是线性的)

编辑:我知道不准确性非常小,并且由于浮点运算会出现一些不准确的情况。奇怪的是,对于相同的数据+函数,结果不同

from scipy.signal import detrend as scipy_detrend
from pylab import *

x = arange(10)
y = arange(10, dtype='int64')

subplot(211)
plot(x, scipy_detrend(y, type="linear"), label='scipy detrend linear')
plot(x, scipy_detrend(y), label='scipy detrend')
plot(x, detrend(y, "linear"), label='pylab detrend')

subplot(212)
plot(x, scipy_detrend(y, type="linear"), label='scipy detrend linear')
plot(x, scipy_detrend(y), label='scipy detrend')
plot(x, detrend(y, "linear"), label='pylab detrend')

show()

注意:红线为pylab.detrend,蓝线为scipy.signal.detrend with linear keyword,绿色为scipy.signal.detrend enter image description here

2 个答案:

答案 0 :(得分:4)

您的数据是范围(10),并且您的去趋势结果是1e-15的顺序,这意味着差异是由于浮点精度。 (您的去趋势结果比您的输入小15个数量级)

答案 1 :(得分:4)

浮点舍入错误。在一般情况下,浮点错误不一定在相同CPU,相同数据和相同代码的运行之间可重现,因为它可能受程序外部事件的影响(除非特别小心):

Consistency of Floating-Point Results using the Intel® Compiler or Why doesn’t my application always give the same answer? - Dr. Martyn J. Corden, David Kreitzer

这似乎是一个FAQ