-3

重複の可能性:
matlab で 2 つの行の平均を計算したい

繰り返して申し訳ありませんが、私はある点で立ち往生しています。一部の行全体が NaN 値を持つ 1028 x 18 の行列があるため、隣接する行の最初の 2 つの要素を比較し、最初の 2 つの要素が等しい場合にのみ平均を計算する必要があります。D は 1028 × 18 の行列です

 [m,n]=size(D);
    for i=1:m-1
    if D(i,1)==D(i+1,1)
    D=reshape(D, 2, m/2*n);
    D=(D(i,:)+D(i+1,:))/2;
    D=reshape(D, m/2, n);
     else
      end 
    end
4

2 に答える 2

1

を使用して、定義に従って有効な行の論理インデックスを作成できますall(~diff(D(:,1:2)), 2)。つまり、1列目と2列目の両方の行ごとの差がゼロである要素です。

次に、このインデックスを使用して、整数行インデックスまたはグローバル行方向平均のマトリックス内のインデックスを返すことができます。

index_row = 1:1:size(D, 1); % linear row index 
index_valid = all(~diff(D(:,1:2)), 2); % valid rows (logical)

mean_matrix = (D(1:end-1,:) + D(2:end,:))/2; % matrix of all means

% matrix of valid mean rows only
mean_matrix_valid = mean_matrix(index_valid,:); % logical index 
% linear index of valid rows, i.e. the pairs indexed (i, i+1)
index_row_valid = index_row(index_valid); % valid rows (int) 

たとえば、

D = [1 2 3 4 5; 1 1 1 1 1; 1 2 4 4 4; 1 2 3 3 3; 2 2 2 2 2; 2 2 3 3 3];

>> D = 
     1     2     3     4     5
     1     1     1     1     1
     1     2     4     4     4
     1     2     3     3     3
     2     2     2     2     2
     2     2     3     3     3

上記を使用して取得します

>> index_valid =

     0
     0
     1
     0
     1

>> index_row_valid =

 3     5

>> mean_matrix_valid =

    1.0000    2.0000    3.5000    3.5000    3.5000
    2.0000    2.0000    2.5000    2.5000    2.5000

これは、それぞれ行(3,4)と(5,6)の平均です。

于 2012-09-25T22:05:47.240 に答える
1

私はmatlabを持っていませんが、ロジックは次のようになります

for row=0,row++

    if ( m[row,1]  == m[row+1,1])
    {
        mean1 = mean(m[row]);
        mean2 = mean(m[row+1]);
        mean = mean(mean1,mean2);
    }

end for

/* この構文は正しくないことに注意してください。アイデアを提供するだけです */

于 2012-09-25T20:52:14.087 に答える