我尝试使用Julia进行自相关,并将其与Python的结果进行比较。为什么他们给出不同的结果
朱莉娅码
using StatsBase
t = range(0, stop=10, length=10)
test_data = sin.(exp.(t.^2))
acf = StatsBase.autocor(test_data)
给予
10-element Array{Float64,1}:
1.0
0.13254954979179642
-0.2030283419321465
0.00029587850872956104
-0.06629381497277881
0.031309038331589614
-0.16633393452504994
-0.08482388975165675
0.0006905628640697538
-0.1443650483145533
Python代码
from statsmodels.tsa.stattools import acf
import numpy as np
t = np.linspace(0,10,10)
test_data = np.sin(np.exp(t**2))
acf_result = acf(test_data)
给予
array([ 1. , 0.14589844, -0.10412699, 0.07817509, -0.12916543,
-0.03469143, -0.129255 , -0.15982435, -0.02067688, -0.14633346])
只需对答案进行一点扩展(添加为答案,因为它太长,无法发表评论)。在Julia中,您有以下内容:
使用Python时:
您可以看到Python中的第8个数字是
70/9
的不准确近似值,而在Julia中,在本例中,您使用Float64
得到了10*i/9
的最接近近似值序列因此,似乎因为原始序列与您不同,其余的序列遵循@Jakob Nissen的评论
然而事情并不是那么简单。因为Julia和Python中的
exp
函数在生成什么方面有点不同。请参见Python:在朱莉娅期间:
(您可以检查
(20/3)^2
在Julia和Python中是否是相同的Float64
)因此,在本例中,使用
exp
Python比Julia更精确。因此,即使修复t
(使用Python中的理解而不是linspace
很容易),也不会使ACF相等总之,结论是@Jakob Nissen对如此大的值所评论的,结果将受到数值误差的强烈影响
这是因为您的
test_data
不同:Python:
朱莉娅:
发生这种情况的原因是您正在获取大量数据。例如,
t
中的最后一个数字是10,exp(10^2)
是~2.7*10^43。在此比例下,浮点精度约为3*10^9。因此,如果Python和Julia的最低有效位都不同,那么sin
值也会相差很远事实上,我们可以检查初始数组
t
的底层二进制值。例如,它们在最后三个值上有所不同:朱莉娅:
Python:
我们确实可以看到,他们的意见完全不同于一台机器。如果我们使用Julia,则取Python获得的值的
sin
:我们得到了与Python相同的值
相关问题 更多 >
编程相关推荐