كيف يمكن العثور على نقاط الارتباط والتجاهل بكفاءة خارج نطاق 3 سيجما في MATLAB؟
-
19-09-2019 - |
سؤال
لدي ملف البيانات m.txt
يبدو مثل هذا (مع الكثير من النقاط):
286.842995
3.444398
3.707202
338.227797
3.597597
283.740414
3.514729
3.512116
3.744235
3.365461
3.384880
بعض القيم (مثل 338.227797
) نكون مختلف جدا من القيم التي أتوقعها بشكل عام (أرقام أصغر).
لذا ، أفكر في أنني سأزيل جميع النقاط التي تقع خارج
3-sigma range
.كيف يمكنني أن أفعل ذلك في MATLAB؟والمشكلة الأكبر أيضًا هي أن هذا الملف يحتوي على ملف منفصل
t.txt
المرتبطة به والتي تخزن القيم الزمنية المقابلة لهذه الأرقام.لذا، سيتعين علي إزالة قيم الوقت المقابلة منt.txt
الملف أيضا.
ما زلت أتعلم MATLAB، وأعلم أنه ستكون هناك طريقة جيدة للقيام بذلك (أفضل من تخزين مؤشرات العناصر التي تمت إزالتها من m.txt
ومن ثم إزالة تلك العناصر من t.txt
ملف)
المحلول
@Amro قريب، ولكن FIND غير ضروري (ابحث عن الاشتراك المنطقي) وتحتاج إلى تضمين المتوسط لنطاق +/- 3 سيجما حقيقي.سأذهب مع ما يلي:
%# load files
m = load('m.txt');
t = load('t.txt');
%# find values within range
z = 3;
meanM = mean(m);
sigmaM = std(m);
I = abs(m - meanM) <= z * sigmaM;
%# keep values within range
m = m(I);
t = t(I);
نصائح أخرى
%# load files
m = load('m.txt');
t = load('t.txt');
%# find outliers indices
z = 3;
idx = find( abs(m-mean(m)) > z*std(m) );
%# remove them from both data and time values
m(idx) = [];
t(idx) = [];