我有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]
答案 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