Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 查找NaN值是单元格数组_Matlab_Cells - Fatal编程技术网

Matlab 查找NaN值是单元格数组

Matlab 查找NaN值是单元格数组,matlab,cells,Matlab,Cells,假设我有以下数组: a = {1; 'abc'; NaN} 现在我想找出它在哪些索引中包含NaN,这样我就可以用“”(空字符串)替换它们 如果我将cellfun与isnan一起使用,我会得到一个无用的输出 cellfun(@isnan, a, 'UniformOutput', false) ans = [ 0] [1x3 logical] [ 1] 那么我该怎么做才能正确呢?我在网上找到了答案 然而,我并不理解……事实上,正如你自己发现的那样,这可以通

假设我有以下数组:

a = {1; 'abc'; NaN}
现在我想找出它在哪些索引中包含NaN,这样我就可以用“”(空字符串)替换它们

如果我将
cellfun
isnan
一起使用,我会得到一个无用的输出

cellfun(@isnan, a, 'UniformOutput', false)

ans = 
[          0]
[1x3 logical]
[          1]
那么我该怎么做才能正确呢?

我在网上找到了答案


然而,我并不理解……

事实上,正如你自己发现的那样,这可以通过

a(cellfun(@(x) any(isnan(x)),a)) = {''}
细分:

Fx = @(x) any(isnan(x))
将返回逻辑标量,无论
x
是标量还是向量。 在
cellfun
中使用此函数将错误指示需要
'UniformOutput',false

>> inds = cellfun(Fx,a)
inds =
     0
     0
     1
这些可以用作原始数组的索引:

>> a(inds)
ans = 
    [NaN]
这反过来又允许分配到这些索引:

>> a(inds) = {''}
a = 
    [1]
    'abc'
    ''
请注意,必须对单元格数组本身进行赋值。如果您不理解这一点,请仔细阅读
a(inds)
a{inds}

  • a(ind)=[]
    将从数组中删除条目
  • a(ind)={'}
    将用空字符串替换
    NaN
如果要删除条目,请使用
=[]
而不是
={''}

如果要用不同的值替换
NaN
s,只需使用大括号将其设置为该值:

a(ind) = {value}

如果
x
是一个矩阵,则需要将匿名函数更改为
@(x)any(any(isnan(x))
(即第二次添加
any
,以确保从函数中获得标量)。@peci1:你说得对。实际上,更一般地说,最好执行
any(isnan(x(:)
),它适用于任何维度的数组,并且只调用一次
any
a(ind) = {value}