matlab求多个矩阵中每个非零元素的平均值

比如,分别有50个大小相同的矩阵,在每个(i,j)上,如果50个矩阵都在这一点上有值,求出这一点的平均值不难。但是有些矩阵在(i,j)上是0,如何计算,抛去含有这样0点的矩阵,只求剩余非零矩阵点上的平均值呢?也就是,若某一点为0,这个矩阵不参加平均值的运算。
例如:两个3*3的矩阵:A=[2 2 3; 0 5 0; 1 0 1]; B=[2 0 1; 2 1 2; 1 2 3];应该得到的结果是[2 2 2;2 3 2; 1 2 2]

第1个回答  2013-01-18
%定义函数
function c=counNum(x,c)[n,m] =size(x);
for k=1:n
for j=1:m
if x(k,j)~=0
c(k,j)=c(k,j)+1;
end
end
end

%计算
A=[2 2 3; 0 5 0; 1 0 1]; B=[2 0 1; 2 1 2; 1 2 3];
c=[0,0,0;0,0,0;0,0,0];
C=counNum(A,c);c=C;
C=counNum(B,c);c=C;
D=(A+B)./c %结果结是[2 2 2;2 3 2; 1 2 2]
第2个回答  2013-01-18
% 考虑到矩阵数量较多,用元胞数组处理较有通用性。
p = 2; % 相同矩阵的数量,或者在输入完元胞数组后 p = length(A)
m = 3; n = 3; % 矩阵的行列数
A{1} = [2 2 3; 0 5 0; 1 0 1]; % 矩阵数据均存入元胞数组内
A{2} = [2 0 1; 2 1 2; 1 2 3];
S = zeros(m,n); % 放置和的矩阵
L = S; % 统计非零元素数量的矩阵
for k = 1:p
S = S+A{k};
L = L+double(A{k}~=0);
end;
R = S./L % 结果本回答被提问者和网友采纳
相似回答