كيف يمكن العثور على نقاط الارتباط والتجاهل بكفاءة خارج نطاق 3 سيجما في MATLAB؟

StackOverflow https://stackoverflow.com/questions/1728709

  •  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) = [];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top