求非零元素的平均值

kuk*_*uku 6 matlab mean

我假设meanfucntion采用矩阵并通过对数组的所有元素求和来计算其均值,并将其除以元素的总数.

但是,我正在使用此功能来计算矩阵的平均值.然后我遇到了一个我不希望平均函数考虑我的矩阵的0个元素的点.具体来说,我的矩阵是1x100000数组,并且它的元素的1/3到1/2都是0.如果是这种情况,我可以替换0元素,NULL以便matlab在计算时不会考虑它们意思?我还可以做些什么?

Sha*_*hai 8

短版:
使用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)


Nra*_*ras 5

当您问“我还能做什么?”时,这是另一种方法,它不依赖于统计信息工具箱或任何其他工具箱。

您可以通过将这些值相加然后除以非零元素(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)


Dan*_*Dan 3

要仅查找非零元素的平均值,请使用逻辑索引提取非零元素,然后调用mean这些元素:

mean(M(M~=0))
Run Code Online (Sandbox Code Playgroud)