ロスマリアーノ:
私はジュリアを使用して自己相関を行うと、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
膨大な数の。たとえば、内の最後の数でt
10である、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はありません同じ値を取得します。