我使用MATLAB版本R2015a。
我从几次解决最优问题得到一系列答案,我想得到他们的总和并平均他们。但是,其中一些是NaN。如何编写代码来忽略那些NaN并将其他不是NaN的内容相加?
您可以使用上述答案中建议的内置函数。如果你想知道逻辑并使用循环..你可以按照如下所示:
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
选项1:使用基础MATLAB中的sum
和isnan
的免工具箱解决方案。
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
您可以使用omitnan
参数
A = [1 2 3 4 5 6 7 8 9 NaN];
s = sum( A, 'omitnan' )
注意,这与在R2006a之前引入的统计工具箱中的nansum
函数使用的字面上的代码完全相同,所以我认为兼容性非常好。