如何将一系列值相加,忽略任何NaN值?

问题描述 投票:1回答:3

我使用MATLAB版本R2015a。

我从几次解决最优问题得到一系列答案,我想得到他们的总和并平均他们。但是,其中一些是NaN。如何编写代码来忽略那些NaN并将其他不是NaN的内容相加?

matlab sum average nan
3个回答
2
投票

您可以使用上述答案中建议的内置函数。如果你想知道逻辑并使用循环..你可以按照如下所示:

A = [NaN 1 2 NaN 3 4 7 -1 NaN] ; 
count = 0 ;
thesum = 0 ; 
for i = 1:length(A)
    if ~isnan(A(i))
        count = count+1 ;
        thesum = thesum+A(i) ;
    end
end

3
投票

选项1:使用基础MATLAB中的sumisnan的免工具箱解决方案。

A = [1 2 3 4 5 6 7 8 9 NaN];
sum(A(~isnan(A)))               % No toolbox required

选项2:nansum(请参阅OP中的answer)注意:nansum需要统计工具箱。

nansum(A)                       % Requires Statistics toolbox

使用MATLAB R2018b进行代码测试。


从评论更新 对于那些拥有更新版本的人来说,@ Cris Luengo提出了很好的建议。不需要工具箱。

sum(A,'omitnan')                % No toolbox required

@Ben Voigt对某些应用程序的另一个建议。也不需要工具箱。

sum(A(isfinite(A)))             % No toolbox required

1
投票

您可以使用omitnan参数

A = [1 2 3 4 5 6 7 8 9 NaN];
s = sum( A, 'omitnan' )

注意,这与在R2006a之前引入的统计工具箱中的nansum函数使用的字面上的代码完全相同,所以我认为兼容性非常好。

© www.soinside.com 2019 - 2024. All rights reserved.