我使用MATLAB版本R2015a。
我几次解决了最优问题,都得到了一系列答案,我想求和并求平均值。但是,其中一些是NaN。如何编写代码以忽略那些NaN并求和其他不是NaN的代码?
答案 0 :(得分:3)
选项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
答案 1 :(得分: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
答案 2 :(得分:1)
您可以使用omitnan
参数
A = [1 2 3 4 5 6 7 8 9 NaN];
s = sum( A, 'omitnan' )
请注意,这实际上与R2006a之前引入的统计信息工具箱中的nansum
函数所使用的代码相同,因此我认为兼容性非常好。