3

特定の範囲に入らない配列の内容に対してメトリックを実行したいと思います。

たとえば、1000 行 2 列の配列があります。行 50-150、250-300、400-700、および 900-950 に該当しない 1 つの列 (列 #2 としましょう) のすべての要素に対して mean() 計算を実行したいと思います。

したがって、平均は行 1 ~ 49、151 ~ 249、301 ~ 399、701 ~ 899、および 951 ~ 1000 に基づいて計算する必要があります。

これについてどうすればいいですか?

編集: プログラムが実行されるたびに、含まれている項目が変更されることを指摘しておく必要があります。したがって、インクルージョンをハードコードすることはできません。それらは除外に基づいて解決する必要があります。

4

2 に答える 2

6

どうですか:

M = rand(1000,2);
idx = setdiff(1:size(M,1), [50:150, 250:300, 400:700, 900:950]);

MM = M(idx,:)

次に、フィルター処理された行列に任意の関数を適用します。

mean(MM,1)
于 2012-06-15T16:31:55.857 に答える
0

除外範囲を定義してから、論理アドレス指定を使用できます。

LowerLimit1 = 1;
UpperLimit1 = 50;

LowerLimit2 = 151;
UpperLimit2 = 249;

LowerLimit3 = 301;
UpperLimit3 = 399;

LowerLimit4 = 701;
UpperLimit4 = 899;

LowerLimit5 = 951;
UpperLimit5 = 1000;

MyVector = MyMatrix(:,2);

MeanValue = mean(MyVector(~(MyVector > LowerLimit1 & MyVector < UpperLimit1) | (MyVector > LowerLimit2 & MyVector < UpperLimit2) |  (MyVector > LowerLimit3 & MyVector < UpperLimit3)  | (MyVector > LowerLimit4 & MyVector < UpperLimit4) | (MyVector > LowerLimit5 & MyVector < UpperLimit5)));
于 2012-06-15T16:43:51.780 に答える