ইটারেটেড মুভিং এভারেজ


13

আমাদের যদি একটি তালিকা থাকে তবে তালিকাটি বলুন [9, 2, 4, 4, 5, 5, 7], আমরা এটি জুড়ে একটি চলমান গড় করতে পারি।

একটি উইন্ডো বলুন, 3 টি উপাদান, প্রতিটি উপাদান এর মতো একটি উইন্ডো দ্বারা প্রতিস্থাপিত হয়: [[9], [9, 2], [9, 2, 4], [2, 4, 4], [4, 4, 5], [4, 5, 5], [5, 5, 7]]এবং তারপরে গড় গ্রহণ করলে আমরা পাই [9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]

এখনও পর্যন্ত খুব সহজ। তবে আপনি যে বিষয়টি লক্ষ্য করতে পারেন তা হ'ল চলন্ত গড়ের তালিকাটি তালিকাটিকে "মসৃণ করে" taking সুতরাং এটি প্রশ্নটি জাগায়: তালিকার "যথেষ্ট মসৃণ" করতে একজনকে কতবার চলন গড় নিতে হবে?

তোমার কাজ

ফ্লোটের একটি তালিকা, একটি পূর্ণসংখ্যার উইন্ডো আকার এবং একটি ফ্লোট দেওয়া হয়, সেই ফ্লোটের চেয়ে কম স্ট্যান্ডার্ড বিচ্যুতি পেতে একজনকে কতবার চলন গড় নিতে হয় output যারা জানেন না তাদের জন্য, স্ট্যান্ডার্ড বিচ্যুতি পরিমাপ করে যে ডেটাগুলির সেটটি কতটা মসৃণ হয় এবং নিম্নলিখিত সূত্র দ্বারা গণনা করা যায়:

এসটিডি দেব

উদাহরণস্বরূপ, আমাদের আগের তালিকাটি এবং একটি সর্বাধিক স্টডিডিভ ব্যবহার করে .5আমরা 8পুনরাবৃত্তিগুলি দেখতে পাই যা দেখতে দেখতে এটি:

[9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]
[9.0, 7.25, 6.5, 4.6111111111111116, 4.2222222222222223, 4.1111111111111107, 4.8888888888888893]
[9.0, 8.125, 7.583333333333333, 6.1203703703703702, 5.1111111111111107, 4.3148148148148149, 4.4074074074074074]
[9.0, 8.5625, 8.2361111111111107, 7.2762345679012341, 6.2716049382716044, 5.1820987654320989, 4.6111111111111107]
[9.0, 8.78125, 8.5995370370370363, 8.024948559670781, 7.2613168724279831, 6.2433127572016458, 5.3549382716049374]
[9.0, 8.890625, 8.7935956790123466, 8.4685785322359397, 7.9619341563786001, 7.1765260631001366, 6.2865226337448554]
[9.0, 8.9453125, 8.8947402263374489, 8.7175997370827627, 8.4080361225422955, 7.8690129172382264, 7.141660951074531]
[9.0, 8.97265625, 8.9466842421124824, 8.8525508211400705, 8.6734586953208357, 8.3315495922877609, 7.8062366636183507]

এবং একটি stdev সঙ্গে শেষ 0.40872556490459366। আপনি শুধু আউটপুট 8

তবে একটি ধরা আছে:

উত্তরটি ননজেগিটিভ হতে হবে না! প্রাথমিক তালিকা যদি ইতিমধ্যে সর্বাধিক এসটিডিদেভকে সন্তুষ্ট করে তবে আপনাকে দেখতে হবে যে আপনি কতগুলি পুনরাবৃত্তি "পিছনে যেতে" পারেন এবং চলমান গড়কে পূর্বাবস্থায় ফেরাতে পারেন এবং এখনও তালিকাটি সর্বাধিক স্টাডিদেবকে সন্তুষ্ট করতে পারে। যেহেতু আমরা প্রাথমিক nতথ্য পয়েন্টগুলির জন্য উইন্ডোজগুলি ছাঁটাই করছি এবং সেগুলি বাদ দিচ্ছি না, তাই চলন্ত গড়ের বিপরীতে যথেষ্ট ডেটা রয়েছে।

উদাহরণস্বরূপ, যদি আমরা তালিকাটি শুরু করি [9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627](এটির আগে আমাদের আরও 3 টি চলন্ত গড়ের উদাহরণ থেকে নেওয়া) এবং একই উইন্ডোর আকার এবং সর্বাধিক স্টডিডিভ, আপনি আউটপুট পাবেন -3কারণ আপনি বেশিরভাগ 3সময়ে চলমান গড়কে বিপরীত করতে পারেন ।

যে কোনও যুক্তিসঙ্গত I / O ফর্ম্যাটটি ভাল।

এটি তাই বাইট জিতে সংক্ষিপ্ততম কোড !

পরীক্ষার কেস

[9, 2,  4,  4,  5,  5,  7], 3, .5 -> 8
[9, 2,  4,  4,  5,  5,  7], 3, .25 -> 9
[9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627], 3, .5 -> -3
[1000, 2,  4,  4,  5,  5,  7], 7, .25 -> 13
[1000.0, 999.98477172851563, 999.96956668760447, 999.95438464397, 999.90890377378616, 999.83353739825293, 999.69923168916694], 4, 7 -> -6


উত্তর:


1

ওল্ফ্রাম - 236

এখনই বেশ চমকপ্রদ, তবে কমপক্ষে এটি কাজ করে।

f[x_,w_,c_]:=Module[{l=Length,d=Sqrt@CentralMoment[#,2]&,n,a,b,t,r},n=Length@x;a=Normalize/@LowerTriangularize@Array[Boole[Abs[#1-#2]<w]&,{n,n}]^2;{b,t,r}=If[d@x>c,{a,d@#>c&,l@#-1&},{Inverse@a,d@#<c&,-l@#+2&}];r@NestWhileList[b.#&,x,t]]

236 বাইট,f[x_,w_,c_]:=Module[{l=Length,d=Sqrt@CentralMoment[#,2]&,n,a,b,t,r},n=Length@x;a=Normalize/@LowerTriangularize@Array[Boole[Abs[#1-#2]<w]&,{n,n}]^2;{b,t,r}=If[d@x>c,{a,d@#>c&,l@#-1&},{Inverse@a,d@#<c&,-l@#+2&}];r@NestWhileList[b.#&,x,t]]
ক্যালকুলেটরফ্লাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.