如何计算矩阵中大于零的元素的平均值

Joh*_*ohn 2 matlab matrix

我想计算每列中大于零的元素的平均值,矩阵定义为:

G =

     1     2     3     0     9     4
     0     1     3     4     0     0
Run Code Online (Sandbox Code Playgroud)

如果一个元素是零,我们将忽略它并且不考虑平均值.我的预期结果是

MeanG= 1/1  3/2  6/2  4/1  9/1 4/1
Run Code Online (Sandbox Code Playgroud)

怎么用matlab代码呢?

ray*_*ica 5

对于一个相当简单的解决方案,如果您有统计工具箱,只需替换所有零和负值,NaN然后使用nanmean.

因此:

>> Gnan = G;
>> Gnan(Gnan <= 0) = NaN;
>> out = nanmean(Gnan)

out =

    1.0000    1.5000    3.0000    4.0000    9.0000    4.0000
Run Code Online (Sandbox Code Playgroud)

我制作了一份副本,G因为我假设您希望保留原始版本以G进行任何进一步的分析,而不是以这种方式计算平均值.


如果您无权访问nanmean,您可以执行的操作是查看每列并确定有多少个零和负数.一旦你这样做,只是每列中总结的所有值是不是由总觉得是值的数量的零和负,和鸿沟不是零和每列负.就像是:

>> zero_neg = G <= 0;
>> Gcopy = G;
>> Gcopy(zero_neg) = 0;
>> out = sum(Gcopy) ./ (size(G,1) - sum(zero_neg))

out =

    1.0000    1.5000    3.0000    4.0000    9.0000    4.0000
Run Code Online (Sandbox Code Playgroud)

这里的复杂性是我们搜索那些零或负的元素,然后复制G并将此副本中的这些元素设置为零,这样这些条目就不会被添加到总和中.你必须通过是项的总数除以占正确的平均值为零或负(或只是积极的实际... 看到中Nras的职位).

请注意,我还会保留G此副本的副本并对其进行更改以计算我们的平均值,因为我假设您要保留原始版本以G进行进一步分析.

次要说明

Jubobs提出了一个非常好的观点.如果该矩阵包含浮点数,由于精度和准确性,与诸如0的确定数字进行比较是非常危险的.例如,如果这是一个矩阵,其中有一些元素,你期望它们为零,但它们不是由于浮点不精确,那么这将无法准确计算出你想要的平均值.看一下这篇文章和@gnovice的这个好答案了解更多细节:为什么24.0000在MATLAB中不等于24.0000?