假设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);
有办法吗?
答案 0 :(得分:6)
然后不要使用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);
答案 1 :(得分:2)
这是一个解决方案:
N = cell2mat(M);
N(isnan(N)) = 0;
M = mat2cell(N,[3,3,3,3,3],3);
如果您的阵列大小不同,则应调整最后一行。