如何改变矩阵前面的矩阵的零点?

时间:2014-03-15 15:00:42

标签: matlab matlab-guide matlab-deployment

我有3 x 8的矩阵,在矩阵中我必须排除零并使用列上的前一个数字。后来,我使用列的元素来计算平均值。 如您所见,列的平均值应介于4.8500和4.9900之间。 我希望我已经清楚了。 我非常感谢你们。

  

[4.8500 4.8900 4.9000 4.8600 4.9900 4.9200 4.9600 4.9600    4.9200 4.8900 4.9000 4.9000 4.9000 4.9800 4.9500 0    4.9000 4.8600 4.9000 4.9300 4.9200 4.9500 0 0]

2 个答案:

答案 0 :(得分:1)

我假设你想要在不考虑zeros的情况下计算逐列方法。

<强>代码

a = [4.8500 4.8900 4.9000 4.8600 4.9900 4.9200 4.9600 4.9600 4.9200 4.8900 4.9000 4.9000 4.9000 4.9800 4.9500 0 4.9000 4.8600 4.9000 4.9300 4.9200 4.9500 0 0];
a = reshape(a',[8 3])'
a(a==0)=NaN;
mean_columnwise = nanmean(a,1)

这里有效的诀窍是将所有zeros转换为NaNs,然后使用nanmean,它会计算忽略NaNs zeros的平均值a = 4.8500 4.8900 4.9000 4.8600 4.9900 4.9200 4.9600 4.9600 4.9200 4.8900 4.9000 4.9000 4.9000 4.9800 4.9500 0 4.9000 4.8600 4.9000 4.9300 4.9200 4.9500 0 0 mean_columnwise = 4.8900 4.8800 4.9000 4.8967 4.9367 4.9500 4.9550 4.9600 先前。

<强>输出

{{1}}

如果您正在追求的话,请告诉我们!

答案 1 :(得分:0)

matrix = [4.8500 4.8900 4.9000 4.8600 4.9900 4.9200 4.9600 4.9600
          4.9200 4.8900 4.9000 4.9000 4.9000 4.9800 4.9500 0     
          4.9000 4.8600 4.9000 4.9300 4.9200 4.9500 0      0]; %// example data

while true %// a loop is used in case there are runs of zeros
    ii = find(matrix==0); %// linear indices of zeros
    if isempty(ii)
        break %// there are no more zeros: exit loop
    end
    matrix(ii) = matrix(ii-1); %// replace zero with preceding value.
    %// That preceding value may also be zero, but that will be taken
    %// care of in the next iteration
end
result = mean(matrix); %// column-wise mean