3

私はMATLABに不慣れなので、初心者の質問で申し訳ありません:

大量のデータを格納する大きなベクトル (905350 要素) があります。私は標準偏差と平均値を持っています。今、平均値から 1 つの標準偏差の上/下にあるすべてのデータ ポイントを切り取りたいと考えています。方法がわかりません。私が収集したものから、ある種の二重ループを作成する必要がありますか?

それは次のようなものです: mean-std < 欲しいデータ < mean + std

4

4 に答える 4

6

データが variableAにあり、平均が に保存されmeanA、標準偏差が に保存されているstdA場合、以下は、データ値の元の順序を維持しながら、必要なデータを抽出します。

B = A((A > meanA-stdA) & (A < meanA+stdA));

上記で使用されている概念に関連するいくつかの役立つドキュメント リンクを次に示します:論理演算子行列インデックス

于 2009-09-20T05:42:54.460 に答える
6

単純に要素単位の論理 AND を使用できます。

m = mean(A);
sd = std(A);
B = A( A>m-sd & A<m+sd );

また、次のことを知って|x|<c iff -c<x<cいれば、次のように両方を 1 つに組み合わせることができます。

B = A( abs(A-m)<sd );
于 2009-09-20T05:44:54.113 に答える
0
y = x(x > mean-std);
y = y(y < mean+std);

動作するはずです。詳細については、 FINDを参照してください。上記のコードでは、FIND コマンドが暗黙的に使用されています。

于 2009-09-20T05:23:15.947 に答える
0

A を元のベクトルとして、B を最終的なベクトルとして使用します。

B = sort(A)
B = B(find(B > mean-std,1,'first'):find(B < mean+std,1,'last'))
于 2009-09-20T05:10:23.403 に答える