我有一个数据文件 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 sigma 范围的平均值。我会选择以下内容:

%# 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