স্বতঃসংশোধনের একটি নিখরচায় নমুনা


11

একটি 1-মাত্রিক, বাস্তব-মূল্যবান ভেক্টর এক্স বিবেচনা করুন যা সময়ের সাথে সমান ব্যবধানের ব্যবধানে পরিমাপ করা কিছু প্রক্রিয়া পর্যবেক্ষণের প্রতিনিধিত্ব করে। আমরা কল এক্স একটি সময় সিরিজ

যাক এন দৈর্ঘ্য বোঝাতে এক্স এবং এক্স বোঝাতে এর গাণিতিক গড় এক্সনমুনা autocovariance ফাংশন হিসাবে সংজ্ঞায়িত করা হয়

autocovariance

সকলের জন্য - n < h < n । এটি বিভিন্ন সময়ে লক্ষ্য করা একই সিরিজের দুটি পয়েন্টের মধ্যে লিনিয়ার নির্ভরতা পরিমাপ করে।

নমুনা autocorrelation ফাংশন , অথবা ACF, হিসাবে সংজ্ঞায়িত করা হয়

autocorrelation

এই ব্যবস্থা সিরিজ রৈখিক ভবিষ্যদ্বাণীর এক্স সময়ে টন , যা আমরা বোঝাতে এক্স টি , শুধুমাত্র মান ব্যবহার এক্স টি + H

নোট করুন যে এই নমুনা অনুমানগুলি তাত্ত্বিক বৈশিষ্ট্যের উপর ভিত্তি করে নিষ্প্রভ গণনার সাথে মেলে না। অর্থাৎ নমুনা autocorrelation ফাংশন হয় না সমান পিয়ারসন পারস্পরিক সম্পর্কের সহগের এর এক্স সঙ্গে -step এর ধীরে ধীরে চলা এক্স

কার্য

প্রদত্ত একটি অ্যারের এক্স এবং নন-নেগেটিভ পূর্ণসংখ্যা মুদ্রণ বা প্রথম আসতে + 1 ল্যাগ এর autocorrelations এক্স , বাধামুক্ত 0. ল্যাগ autocorrelations ঐ উপরে সূত্রে নেতিবাচক ইনপুট সংশ্লিষ্ট হয় সূচনা করে।

আপনি ধরে নিতে পারেন যে 0 < h < n , যেখানে n হল দৈর্ঘ্য x এবং 2 < n <256।

আউটপুট 1E-4 এর মধ্যে সঠিক হওয়া উচিত। অন্তর্নির্মিত ফাংশন বা চলমান সময় ব্যবহারে কোনও বিধিনিষেধ নেই।

উদাহরণ

h, x -> output
--------------
5, [2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2] -> [1.00000000,  0.07659298, -0.06007802, -0.51144343, -0.02912874, -0.10468140]
1, [2134, 1863, 1877, 1877, 1492, 1249] -> [1.0000000, 0.3343041]
2, [13067.3, 13130.5, 13198.4] -> [1.0000000000, -0.0002854906, -0.4997145094]

উত্তর:


4

জেলি, 26 25 24 23 20 বাইট

×L_SµḊ;0µƓС׹S€µF÷Ḣ

এটি অনলাইন চেষ্টা করুন!

কিভাবে এটা কাজ করে

×L_SµḊ;0µƓС׹S€µF÷Ḣ  Main link. Input: x (list) STDIN: h (integer)

×L                    Multiply all items in x by the length of x.
  _S                  Subtract the sum of x from all products.
                      Let's call the result X.
    µ                 Begin a new monadic chain. Argument: t (list)
     Ḋ                Remove the first element of t.
      ;0              Append a 0 to the result.
        µ             Push the previous chain and begin a new one.
                      Argument: X
         Ɠ            Read h from STDIN.
          С          Repeat the Ḋ;0 chain h times, collecting the h+1 intermediate
                      results in a list A.
            ×¹        Multiply the vectors in A by X.
              S€      Compute the sum of each vectorized product.
                µ     Begin a new, monadic chain. Argument: S (sums)
                 F    Flatten S. This does nothing except creating a deep copy.
                   Ḣ  Pop the first element of S.
                  ÷   Divide all elements of the copy by the first element.

6

আর, 3 31 25 বাইট

# changes the builtin to only return the acf
body(acf)=body(acf)[1:18]

ব্যবহার (স্বতঃসংশোধনের সাথে একটি অ্যারে প্রদান করে)

(acf(c(2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2),5))
# , , 1
#
#             [,1]
# [1,]  1.00000000
# [2,]  0.07659298
# [3,] -0.06007802
# [4,] -0.51144343
# [5,] -0.02912874
# [6,] -0.10468140

পটভূমি:

মূল acfঅন্তর্নির্মিত উপর ভিত্তি করে 31 বাইট সমাধান

function(n,h)c(acf(n,h,,F)$acf)

নোট করুন যে 3 বাইট বিকল্প acf তালিকার একটি উপাদান হিসাবে প্রয়োজনীয় স্বতঃসংশ্লিষ্টকরণ ফিরিয়ে দেওয়ার সময় প্লট করবে (এবং 3 অঙ্কে মুদ্রণ করবে) এতে মূল নির্মিত হয়েছে।

ব্যবহার

 acf(c(2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2),5)

আউটপুট:

#    Autocorrelations of series ‘c(2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2)’, by lag
#
#     0      1      2      3      4      5 
# 1.000  0.077 -0.060 -0.511 -0.029 -0.105 

আমরা যদি 3 টিরও বেশি দশমিক স্থানে পারস্পরিক সম্পর্কগুলি প্রদর্শন করতে চাই তবে 28 বাইটগুলি এটি করবে (বা 31, যদি আমরা প্লটটি দমন করতে চাই)

# will still plot (28 bytes)
function(n,h)c(acf(n,h)$acf)
# won't plot (31 bytes)
function(n,h)c(acf(n,h,,F)$acf)

এটি সম্ভবত আমি যে ক্লিভারেস্ট কৌশলটি দেখেছি। কেউ এটা করতে পারে তা আমার ধারণা ছিল না। আমরা আর মাসের ভাষা হিসাবে আর নির্বাচিত হওয়ার চেষ্টা করছি - এটি ঘটানোর জন্য আপনি এই মেটা উত্তরটি আপগেট করতে পারেন ।
জেসি

3

পাইথন 3, 147 130 126 120 বাইট

def p(h,x):x=[t-sum(x)/len(x)for t in x];return[sum(s*t for s,t in zip(x[n:],x))/sum(b*b for b in x)for n in range(h+1)]

এই সমাধানটি সম্ভবত আরও গল্ফ হতে চলেছে, এটি কেবল একটি শুরু।

আপনি এটি দিয়ে কল করতে পারেন:

p(5,[2.4, 2.4, 2.4, 2.2, 2.1, 1.5, 2.3, 2.3, 2.5, 2])

2

এমএটিএল , 20 বাইট

tYm-tPX+tX>/GnqiQ:+)

সম্পাদনা (20 মে, 2016): ভাষার 18.0.0 সংস্করণ হিসাবে, Y+পরিবর্তে ব্যবহার করুন X+। লিঙ্কটিতে এই পরিবর্তন অন্তর্ভুক্ত রয়েছে।

এটি অনলাইন চেষ্টা করুন!

সমঝোতা দৃ .়তার সাথে নিবিড়ভাবে সম্পর্কিত। আমরা গড়কে বিয়োগ করে স্বাভাবিক করি, তারপরে সংশোধন করি, সর্বোচ্চ মান দ্বারা ভাগ করে আবার স্বাভাবিক করি এবং তারপরে কাঙ্ক্ষিত ল্যাগগুলি চয়ন করি।

tYm-       % implicit input. Duplicate and subtract mean
tPX+       % duplicate, flip, convolve
tX>/       % duplicate, divide by maximum value
Gnq        % length of array, n. Subtract 1
iQ:        % input number h. Generate vector [1,2,...,h+1]
+          % add to obtain vector [n,n+1,...,n+h]
)          % use that vector as an index. Implicitly display

1

গণিত, 27 বাইট

1 বাইট সংরক্ষণের জন্য লেজিয়ানম্যামাল978কে ধন্যবাদ।

ফাংশনটির নাম এত দীর্ঘ না থাকলে আমরা জেলিকে মারতে পারি।

#2~CorrelationFunction~{#}&

পরীক্ষা ক্ষেত্রে

%[5,{2.4,2.4,2.4,2.2,2.1,1.5,2.3,2.3,2.5,2}]
(* {1.,0.076593,-0.060078,-0.511443,-0.0291287,-0.104681} *)

আমার ইন্টারনেট নেমে যাওয়ার আগে আমি এটি পোস্ট করতে চলেছিলাম ... আপনি একটি বাইট সংরক্ষণ করতে পারেন #2~CorrelationFunction~{#}&
লিজিয়নম্যামাল 978

1

অক্টাভা, 47 37 বাইট

@(h,x)xcov(x,'coeff')(numel(x)+(0:h))

@ রাইনার আপনি বেনামে ফাংশন ব্যবহার করে সম্ভবত কয়েকটি বাইট সংরক্ষণ করতে পারেন (এবং সেই ক্ষেত্রে আমি মনে করি আপনি এড়িয়ে যেতে পারেন disp, কারণ আপনি কোনও ফাংশন আউটপুট ফেরত পাঠাচ্ছেন)
লুইস মেন্ডো

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