7

假设我有以下数组:

a = {1; 'abc'; NaN}

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

如果我使用cellfunwithisnan我得到一个无用的输出

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

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

那么我该怎么做呢?

4

3 回答 3

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}

于 2012-08-10T09:50:31.217 回答
3

我在http://www.mathworks.com/matlabcentral/answers/42273上找到了答案

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

不过,没看懂……

于 2012-08-10T09:41:03.087 回答
2
  • a(ind) = []将从数组中删除条目
  • a(ind)= {''}将替换为NaN空字符串。

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

a(ind) = {value}
于 2012-08-10T13:10:14.773 回答