0

列が に等しい値を表す 1000x7 の行列があります-99

fprintfを使用してテーブルを作成しているため、各列の平均を個別に計算したいのです、値を除いて平均を計算したい-99です。

たとえば、マトリックスを取ってA、私は試しました

mean(A(A(:,1) ~= -99))

そして、それは最初の列の平均の計算に機能します。

しかし、試してみると

mean(A(A(:,2) ~= -99))

2 番目の列の結果は、最初の列の結果とまったく同じです。

それの何が問題なのですか?あなたのヒントを前もってありがとう!

4

4 に答える 4

1

インデックス値を最初の列のみに取得しています。

試す

mean(A(A(:,2) ~= -99),2)%2 列目

于 2013-03-25T19:16:24.247 に答える
1

つまり、値を読み取るときに列を指定する必要があります。

mean(A(A(:,2) ~= -99, 2))

より長いバージョン:論理配列をA(:,1) ~= -99返します。論理配列でインデックスを作成する場合、Matlab は両方の配列を効果的に平坦化し、論理配列が である値を抽出します。1000 x 1A(:,2) ~= -99true

論理配列BM要素があり、 にインデックス付けされている配列AN要素がある場合、 Matlab はieの最初の要素でM <= Nのみ動作します * と同等ですMBC = A(B)

C = A(1:M);
C = C(B);

あなたの例1000 x 7では、論理配列を使用して配列にインデックスを付けてい1000 x 1ます。これにより、すべての呼び出しで最初の 1000 要素、つまり最初の列のみが考慮されます。したがって、論理インデックスを適用する列を指定する必要があります。

*B1xM配列の場合、結果の配列も配列に再形成されます。1xMそれ以外の場合はすべて、Mx1配列が返されます。

于 2013-03-25T19:51:04.653 に答える
0

たとえば、最初の列が必要です。

mean(A(find(A(:,1) ~= -99),1))

例えば:

>> A

A =

     1     2
     1     3
   -99     4
     1     5

それで、

>> find(A(:,1)~=-99)

ans =

     1
     2
     4

と、

>> mean(A(find(A(:,1)~=-99),1))

ans =

     1
于 2013-03-25T19:21:54.797 に答える
0

ベクトル を使用しA(:,1)~=-99て配列にインデックスを付けているため、最初の列の値にのみアクセスしています。配列内の各列に対してこの計算を行う方法の例を次に示します。

A = [1 2 3; -99, 4, 3; 10 4 8];

for col = 1:3
    index = A(:,col) ~= -99;
    mean(A(index,col))
end
于 2013-03-25T19:33:12.623 に答える