-3

可能重复:
我想在matlab中计算两行的平均值

我很抱歉重复自己,但我被困在一个点上。我有一个 1028 x 18 矩阵,其中一些整行具有 NaN 值。所以我需要比较相邻行的前两个元素并仅在前两个元素相等时计算平均值。D 是 1028 x 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),即第一列和第二列的元素,逐行差异为零。

然后,您可以使用此索引返回整数行索引或全局行均值矩阵中的索引。

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 回答