4

我有一个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文件中删除这些元素更好)

4

2 回答 2

7

@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); 
于 2009-11-13T13:29:51.210 回答
4
%# 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) = [];
于 2009-11-13T12:59:55.863 回答