在 MATLAB 中替换单元格的值

Replacing values of a cell in MATLAB

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

这是一个解决方案:

N = cell2mat(M);
N(isnan(N)) = 0;
M = mat2cell(N,[3,3,3,3,3],3);

如果您的数组大小不同,应调整最后一行。