如何仅考虑某些值来计算平均值

时间:2014-03-31 14:30:47

标签: matlab matrix average zero

我正在处理一个包含大量零值的大矩阵。当我将这个矩阵从列表转换为交叉表时,我有更多的零值。我想保留所有的初始值它中的值,并且压缩从matlab添加的所有零值来计算平均值。这是我想要做的一个例子:

X =

0.6000    0.6000    5.0000

0.6000    0.8000    6.0000

0.6000    0.8500         0

0.6000    0.8200         0

0.8000    0.8000    9.0000

0.8000    0.9000    2.0000

列表交叉表

   NaN    0.6000    0.8000    0.8200    0.8500    0.9000
0.6000    5.0000    6.0000         0         0         0 Average=(5+6+0+0)/4=2,75
0.8000         0    9.0000         0         0    2.0000 Average=(9+2)/2=5,5

提前致谢

3 个答案:

答案 0 :(得分:2)

要计算除零之外的平均值,您可以使用

result = sum(x(:))/nnz(x);

计算除零之外的每一行的平均值:

result = sum(x.')./sum(x.'~=0);

上述解决方案假设应从计算中删除所有零。

答案 1 :(得分:1)

如果您想在不考虑零的情况下找到矩阵的均值,请尝试使用 -

%%// Given matrix
x =   [NaN    0.6000    0.8000    0.8200    0.8500    0.9000;
0.6000    5.0000    6.0000         0         0         0;
0.8000         0    9.0000         0         0    2.0000] 

x1 = x;
x1(x==0)=NaN;
rowwise_mean_without_zeros = nanmean(x1,2) %%// mean of rows
whole_mean_without_zeros = nanmean(x1(:)) %%// mean of the whole matrix

输出

rowwise_mean_without_zeros =

    0.7940
    3.8667
    3.9333


whole_mean_without_zeros =

    2.4882

答案 2 :(得分:0)

以下是一些不应该难以理解的描述。选择符合您需求的那个。

假设您想要获取包含至少1条记录的组合的平均值,我想您需要的信息不仅仅是结果表。

您需要保留一个值的索引,或者您需要在源表中查找它。或者,您也可以使用NaN值初始化表,并且只有在原始列表中出现组合时才将值放在那里。


另一种方法是将计数添加到原始列表中,每个值发生的频率,然后根据该计算进行计算。