পাইথন বনাম জুলিয়া স্বতঃসংশোধন


19

আমি জুলিয়া ব্যবহার করে স্বতঃসংশ্লিষ্ট করার চেষ্টা করছি এবং পাইথনের ফলাফলের সাথে এটি তুলনা করছি। তারা কীভাবে আসে বিভিন্ন ফলাফল?

জুলিয়া কোড

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

পাইথন কোড

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])

1
উভয় ক্ষেত্রেই পরীক্ষার ডেটা মুদ্রণ করুন
ম্যাড ফিজিক্যাল

উত্তর:


26

এটির কারণটি আপনার test_dataআলাদা:

পাইথন:

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। সুতরাং পাইথন এবং জুলিয়ার জন্য এমনকি যদি সর্বনিম্ন উল্লেখযোগ্য বিট আলাদা sinহয় তবে মানটি বন্ধ হয়ে যায়।

আসলে, আমরা প্রাথমিক অ্যারের অন্তর্নিহিত বাইনারি মানগুলি পরিদর্শন করতে পারি t। উদাহরণস্বরূপ, তারা তৃতীয় শেষ মানের মধ্যে পৃথক:

জুলিয়া:

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

পাইথন:

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

আমরা প্রকৃতপক্ষে দেখতে পাচ্ছি যে তারা ঠিক একটি মেশিনের অ্যাপসিলনের দ্বারা একমত নয়। এবং যদি আমরা জুলিয়া sinপাইথন দ্বারা প্রাপ্ত মূল্য গ্রহণ করি:

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

পাইথনের সমান মান আমরা পাই।


9

উত্তরের উপর কিছুটা প্রসারিত করার জন্য (কোনও মন্তব্যের জন্য এটি দীর্ঘ হিসাবে উত্তর হিসাবে যুক্ত করা)। জুলিয়ায় আপনার নিম্নলিখিতগুলি রয়েছে:

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

পাইথনে থাকাকালীন:

>>> 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])

এবং আপনি দেখতে পাচ্ছেন যে পাইথনের ৮ ম-তম সংখ্যাটি একটি যথাযথ অনুমান 70/9, যদিও জুলিয়াতে আপনি এই ক্ষেত্রে নিকটতম 10*i/9ব্যবহারের অনুক্রমের ক্রম পান Float64

সুতরাং এটি মনে হবে যেহেতু মূল ক্রমগুলি আপনার থেকে পৃথক রয়েছে বাকীটি যা জাকোব নিসসেন মন্তব্য করেছিলেন তা অনুসরণ করে।

তবে জিনিসগুলি এত সহজ নয়। হিসাবে expজুলিয়া এবং পাইথন ইন ফাংশান তারা যা উৎপাদন করে একটু পৃথক। পাইথন দেখুন:

>>> from math import exp
>>> from mpmath import mp
>>> mp.dps = 1000
>>> float(mp.exp((20/3)**2) - exp((20/3)**2))
-1957.096392544307

জুলিয়ায় থাকাকালীন:

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

(আপনি জুলিয়া এবং পাইথন উভয় (20/3)^2ক্ষেত্রেই এটি একই পরীক্ষা করতে পারেন Float64)।

সুতরাং expপাইথনের ক্ষেত্রে এই ক্ষেত্রে জুলিয়ার চেয়ে কিছুটা বেশি সঠিক। সুতরাং এমনকি স্থিরকরণ t(যা পাইথনের পরিবর্তে বোঝার ব্যবহার করে সহজ linspace) এসিএফকে সমান করে তুলবে না।

সমস্ত উপসংহারে সব মিলিয়ে @ যাকোব নিসসেন এমন বৃহত মূল্যবোধের জন্য মন্তব্য করেছিলেন ফলাফলগুলি সংখ্যাসূচক ভুলগুলির দ্বারা দৃ strongly়ভাবে প্রভাবিত হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.