找到NaN值是单元格数组

时间:2012-08-10 09:33:41

标签: matlab cells

假设我有以下数组:

a = {1; 'abc'; NaN}

现在我想找出哪些索引包含NaN,以便我可以用''(空字符串)替换它们。

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

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

ans = 
[          0]
[1x3 logical]
[          1]

那我该怎么做呢?

3 个答案:

答案 0 :(得分:11)

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

完成
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}之间的差异。

答案 1 :(得分:3)

我在http://www.mathworks.com/matlabcentral/answers/42273

找到了答案
a(cellfun(@(x) any(isnan(x)),a)) = {''}

然而,我不明白......

答案 2 :(得分:2)

  • a(ind) = []将删除数组中的条目
  • a(ind)= {''}会将NaN替换为空字符串。

如果要删除条目,请使用= []而不是= {''} 如果你想用不同的值替换NaN s,只需使用花括号将其设置为等于该值:

a(ind) = {value}