Nur um die Antwort ein wenig zu erweitern (als Antwort hinzufügen, da sie für einen Kommentar zu lang ist). In Julia haben Sie Folgendes:
julia> t = collect(range(0, stop=10, length=10))
10-element Array{Float64,1}:
0.0
1.1111111111111112
2.2222222222222223
3.3333333333333335
4.444444444444445
5.555555555555555
6.666666666666667
7.777777777777778
8.88888888888889
10.0
julia> t .- [10*i / 9 for i in 0:9]
10-element Array{Float64,1}:
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
während in Python:
>>> t = np.linspace(0,10,10)
>>> t - [10*i/9 for i in range(10)]
array([0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,
0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 8.8817842e-16,
0.0000000e+00, 0.0000000e+00])
und Sie sehen, dass die 8. Zahl in Python eine ungenaue Annäherung an ist 70/9
, während Sie in Julia in diesem Fall die Folge der engsten Annäherungen an die 10*i/9
Verwendung erhalten Float64
.
Es scheint also, dass der Rest dem folgt, was @Jakob Nissen kommentiert hat, weil sich die ursprünglichen Sequenzen unterscheiden.
Die Dinge sind jedoch nicht so einfach. Da exp
Funktionen in Julia und Python sich ein wenig in dem unterscheiden, was sie produzieren. Siehe Python:
>>> from math import exp
>>> from mpmath import mp
>>> mp.dps = 1000
>>> float(mp.exp((20/3)**2) - exp((20/3)**2))
-1957.096392544307
während in Julia:
julia> setprecision(1000)
1000
julia> Float64(exp(big((20/3)^2)) - exp((20/3)^2))
2138.903607455693
julia> Float64(exp(big((20/3)^2)) - nextfloat(exp((20/3)^2)))
-1957.096392544307
(Sie können überprüfen, ob (20/3)^2
dies Float64
sowohl in Julia als auch in Python gleich ist).
In diesem Fall ist exp
Python also etwas genauer als Julia. Daher wird selbst das Korrigieren t
(was durch die Verwendung eines Verständnisses in Python anstelle von einfach ist linspace
) nicht dazu führen, dass der ACF gleich ist.
Alles in allem ist die Schlussfolgerung, was @Jakob Nissen für so große Werte kommentierte, dass die Ergebnisse stark von den numerischen Ungenauigkeiten beeinflusst werden.