添加2x2矩阵与NaNs

bru*_*lin 3 matlab sum nan

更多的一般MATLAB问题而不是寻找编程建议 - 如果我有:

y = cellfun(@(x)sum(x(:)), Z, 'un', 0);
Run Code Online (Sandbox Code Playgroud)

NaN在每个单元矩阵中存在's'和实数的组合时,当我对每个单元格中的所有矩阵的所有元素求和时,我总是得到total = NaN因为那里NaN有,或者它们会被忽略而只是求和实数.我问的原因是因为我得到了:

y = [NaN] [NaN] [NaN]
    [NaN] [NaN] [NaN]
    [NaN] [NaN] [NaN]
Run Code Online (Sandbox Code Playgroud)

示例单元矩阵(单元元素)将是:

x{1,1} = NaN 2   3
         4   5   6
         7   8   9
Run Code Online (Sandbox Code Playgroud)

所以我希望第一个元素y是:

y{1,1} = 44
Run Code Online (Sandbox Code Playgroud)

我怎么没有得到这个?

Chr*_*lor 7

您应该使用nansum(来自统计工具箱)而不是sum.

如果您没有统计工具箱,则可以nansum通过以下方式轻松定义:

function x = nansum(array,dim)

if nargin < 2
    if size(array,1) == 1
        dim = 2;
    else
        dim = 1;
    end
end

array(isnan(array)) = 0;

x  = sum(array,dim);
Run Code Online (Sandbox Code Playgroud)

本质上,问题是sum尝试对输入向量的每个元素求和.如果其中一个元素是NaN整个总和NaN(你可以认为NaN代表未知数据 - 显然如果你不知道其中一个数据是什么,那么你就不知道所有部分的总和是多少数据也是).

该函数nansum将所有缺失的数据视为零,因此以下代码给出了您期望的结果:

>> nansum( [NaN 2 3 4 5 6 7 8 9] )
ans =
    44
Run Code Online (Sandbox Code Playgroud)