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