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シグマ範囲の平均を含める必要があります。私は次のように行きます:

%# 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 に答える