假设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);