假设M是一个5x1单元,它看起来像:

3x3 double
3x3 double
3x3 double
3x3 double
3x3 double

举例来说,第一个单元格是:
3  NaN  1
0   1  NaN
4   8   9

我想将每个单元格的NaN值替换为零但是,由于cellfun不支持显式赋值(=),因此我无法按如下方式正确使用它:
D = cellfun(@(x) x(isnan(x)) = 0, D, 'UniformOutput', false);

有办法吗?

最佳答案

那么不要使用cellfun使用实际的for循环:

for ii = 1 : numel(D)
    D{ii}(isnan(D{ii})) = 0;
end

cellfun本质上是引擎盖下的一个for循环但是,如果您真的要使用cellfun,因为匿名函数不支持赋值,您可以做的一件事是编写一个补充函数来执行您在代码中尝试执行的操作,然后在使用cellfun时提供此函数的句柄。
生成一个名为replace_nan的函数,该函数包含以下内容:
function x = replace_nan(x)
    x(isnan(x)) = 0;
end

现在呼叫cellfun
D = cellfun(@replace_nan, D, 'UniformOutput', false);

09-04 18:04