ジュリア自己相関対のPython

ロスマリアーノ:

私はジュリアを使用して自己相関を行うと、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])
ヤコブ・ニッセン:

あなたのためですtest_data異なります。

Pythonの:

array([ 0.84147098, -0.29102733,  0.96323736,  0.75441021, -0.37291918,
        0.85600145,  0.89676529, -0.34006519, -0.75811102, -0.99910501])

ジュリア:

[0.8414709848078965, -0.2910273263243299, 0.963237364649543, 0.7544102058854344,
 -0.3729191776326039, 0.8560014512776061, 0.9841238290665676, 0.1665709194875013,
 -0.7581110212957692, -0.9991050130774393]

あなたが取っているので、これが起こるsin膨大な数の。たとえば、内の最後の数でt10である、exp(10^2)〜2.7×10 ^ 43です。このスケールでは、浮動小数点の不正確さは3 * 10 ^ 9についてです。でも、最下位ビットがPythonとジュリアのために異なっているのであれば、sin値は道オフになります。

実際には、我々は最初の配列の基礎となるバイナリ値を調べることができますt例えば、彼らは第三の最後の値が異なります。

ジュリア:

julia> reinterpret(Int, range(0, stop=10, length=10)[end-2])
4620443017702830535

Pythonの:

>>> import struct
>>> s = struct.pack('>d', np.linspace(0,10,10)[-3])
>>> struct.unpack('>q', s)[0]
4620443017702830536

私たちは、確かに彼らは正確に一つのマシンイプシロンで一致しないことがわかります。そして、我々はジュリアテイク使用している場合sinはPythonで得られた値のを:

julia> sin(exp(reinterpret(Float64, 4620443017702830536)^2))
-0.3400651855865199

私たちは、Pythonはありません同じ値を取得します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4489&siteId=1