চলমান গড় ডেটা থেকে ডেটা পয়েন্টগুলি বের করা কি সম্ভব?
অন্য কথায়, যদি ডেটা সংস্থায় কেবল পূর্ববর্তী 30 পয়েন্টের সরল গড় হয় তবে মূল ডেটার পয়েন্টগুলি বের করা কি সম্ভব?
যদি তাই হয়, কিভাবে?
চলমান গড় ডেটা থেকে ডেটা পয়েন্টগুলি বের করা কি সম্ভব?
অন্য কথায়, যদি ডেটা সংস্থায় কেবল পূর্ববর্তী 30 পয়েন্টের সরল গড় হয় তবে মূল ডেটার পয়েন্টগুলি বের করা কি সম্ভব?
যদি তাই হয়, কিভাবে?
উত্তর:
+1 এর পুরো প্রশ্নের উত্তর, যা সম্পূর্ণ। আর-তে এটি অনুবাদ করার জন্য একটি নোট, প্যাকেজগুলির ভিত্তিতে যা আমি হাতে অপারেশনগুলি পেয়েছি। আমার ক্ষেত্রে, আমার কাছে এমন ডেটা ছিল যা তিন মাসের ভিত্তিতে NOAA তাপমাত্রার পূর্বাভাস ছিল: জানু-ফেব্রুয়ারি-মার্চ, ফেব্রুয়ারি-মার্চ-এপ্রি, মার-এপ্রিল-মে, ইত্যাদি, এবং আমি এটিকে প্রায় বেরিয়ে আনতে চেয়েছিলাম (আনুমানিক) মাসিক মানগুলি ধরে নিয়ে যে প্রতিটি তিন মাসের সময়কালের তাপমাত্রা মূলত গড়।
library (Matrix)
library (matrixcalc)
# Feb-Mar-Apr through Nov-Dec-Jan temperature forecasts:
qtemps <- c(46.0, 56.4, 65.8, 73.4, 77.4, 76.2, 69.5, 60.1, 49.5, 41.2)
# Thus I need a 10x12 matrix, which is a band matrix but with the first
# and last rows removed so that each row contains 3 1's, for three months.
# Yeah, the as.matrix and all is a bit obfuscated, but the results of
# band are not what svd.inverse wants.
a <- as.matrix (band (matrix (1, nrow=12, ncol=12), -1, 1)[-c(1, 12),])
ai <- svd.inverse (a)
mtemps <- t(qtemps) %*% t(ai) * 3
যা আমার পক্ষে দুর্দান্ত কাজ করে। ধন্যবাদ @ ফাবি
সম্পাদনা: ঠিক আছে, আমার আরথকে পিথনে অনুবাদ করে, আমি পেয়েছি:
from numpy import *
from numpy.linalg import *
qtemps = transpose ([[46.0, 56.4, 65.8, 73.4, 77.4, 76.2, 69.5, 60.1, 49.5, 41.2]])
a = tril (ones ((12, 12)), 2) - tril (ones ((12, 12)), -1)
a = a[0:10,:]
ai = pinv (a)
mtemps = dot (ai, qtemps) * 3
(যা আর সংস্করণের তুলনায় ডিবাগ করতে অনেক বেশি সময় নিয়েছে First প্রথম কারণ আমি আর এর মতো পাইথনের সাথে তেমন পরিচিত নই, তবে এটি ইন্টারঅ্যাকটিভভাবে আর ব্যবহারের যোগ্য বলেও বেশি because)
আমি whuber একটি উত্তর একটি উত্তর দেওয়ার চেষ্টা করি। আসুন বলতে আপনি একটি বড় ভেক্টর আছে সঙ্গে এন = এন্ট্রি। আপনি দৈর্ঘ্যের একটি উইন্ডো সঙ্গে একটি গড় চলন্ত গনা তাহলে ℓ = 30 , আপনি একটি ভেক্টর ম্যাট্রিক্স গুণ হিসাবে এই লিখতে পারেন Y = একটি এক্স এর ভেক্টর এক্স ম্যাট্রিক্স সঙ্গে
যা হয়েছে বেশী যা আপনি সারি ধরে এগিয়ে যেমন মাধ্যমে স্থানান্তরিত পর্যন্ত 30 জনকে ম্যাট্রিক্স শেষে আঘাত। এখানে গড় ভেক্টর ওয়াই এর 1970 টি মাত্রা রয়েছে। ম্যাট্রিক্সে 1970 টি সারি এবং 2000 কলাম রয়েছে। অতএব, এটি পরিবর্তনযোগ্য নয়।
আপনি যদি ম্যাট্রিক্সের সাথে পরিচিত না হন তবে একটি লিনিয়ার সমীকরণ সিস্টেম হিসাবে এটি সম্পর্কে ভাবেন: আপনি এক্স 1 , ভেরিয়েবল অনুসন্ধান করছেন ।
সমীকরণ সিস্টেমের (এবং ম্যাট্রিক্স) সমস্যাটি হচ্ছে এটির সমীকরণের চেয়ে অজানা। অতএব, আপনি নিজের অজানা x 1 , সনাক্ত করতে পারবেন না । । ।
একটি উপায়
অনেকগুলি সংখ্যক প্রোগ্রামে সিউডো-ইনভারসেস সরবরাহ করা হয় (উদাঃ মতলব, অজগর ইত্যাদি)।
আমার উদাহরণ থেকে সিগন্যালগুলি তৈরি করার জন্য এখানে অজগর কোডটি থাকবে:
from numpy import *
from numpy.linalg import *
from matplotlib.pyplot import *
# get A and its inverse
A = (tril(ones((2000,2000)),-1) - tril(ones((2000,2000)),-31))/30.
A = A[30:,:]
pA = pinv(A) #pseudo inverse
# get x
x = random.randn(2000) + 5
y = dot(A,x)
# reconstruct
x2 = dot(pA,y)
plot(x,label='original x')
plot(y,label='averaged x')
plot(x2,label='reconstructed x')
legend()
show()
আশা করি এইটি কাজ করবে.