我试图在矩阵的每一列中返回非零元素的均值;
我的第一次尝试是:
i = 1:peopleCount;
nonZero1(i,:) = mean(nonzeros(Y(:,i)));
为所有列返回相同的结果,而我的第二次尝试:
for i = 1:peopleCount;
nonZero2(i) = mean(nonzeros(Y(:,i)));
end
返回正确的答案。
他们看起来和我相同,但显然,他们不是。
答案 0 :(得分:4)
这是非破坏性的(不改变输入矩阵)和单线方法 -
mean_col_vals = sum(Y,1)./sum(Y~=0,1)
技巧非常简单 - 我们得到每列的和,并除以非零元素的数量,这些元素实际上是对求和值的贡献。此外,由于mean
内部调用sum
,因此我们使用此技术避免了一个函数调用开销!
答案 1 :(得分:2)
正如您所指出的,nonzeros
会返回一个列向量,因此您不能指望多种方法,而是为nonZero1(:,i)
的每个元素分配相同的值。
没有循环的可能解决方案:
A = Y(:,i);
A(A==0) = NaN;
nonZero3 = nanmean(A,1);