短版:
使用nonzeros:
mean( nonzeros(M) );
Run Code Online (Sandbox Code Playgroud)
更长的答案:
如果您正在使用具有100K条目的数组,并且大量这些条目为0,您可以考虑使用sparse表示.将它存储为列向量而不是行向量也可能值得考虑.
sM = sparse(M(:)); %// sparse column
mean( nonzeros(sM) ); %// mean of only non-zeros
mean( sM ); %// mean including zeros
Run Code Online (Sandbox Code Playgroud)
当您问“我还能做什么?”时,这是另一种方法,它不依赖于统计信息工具箱或任何其他工具箱。
您可以通过将这些值相加然后除以非零元素(nnz())的数量来计算出它们的含义。由于求和零不会影响总和,因此将得到期望的结果。对于一维的情况,您似乎可以做到这一点,如下所示:
% // 1 dimensional case
M = [1, 1, 0 4];
sum(M)/nnz(M) % // 6/3 = 2
Run Code Online (Sandbox Code Playgroud)
对于二维情况(或n维情况),您必须指定进行求和的维度
% // 2-dimensional case (or n-dimensional)
M = [1, 1, 0, 4
2, 2, 4, 0
0, 0, 0, 1];
% // column means of nonzero elements
mean_col = sum(M, 1)./sum(M~=0, 1) % // [1.5, 1.5, 4, 2.5]
% // row means of nonzero elements
mean_row = sum(M, 2)./sum(M~=0, 2) % // [2; 2.667; 1.0]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12344 次 |
| 最近记录: |