假设我有以下数组:
a = {1; 'abc'; NaN}
现在我想找出哪些索引包含NaN,以便我可以用''(空字符串)替换它们。
如果我将cellfun
与isnan
一起使用,我会得到无用的输出
cellfun(@isnan, a, 'UniformOutput', false)
ans =
[ 0]
[1x3 logical]
[ 1]
那我该怎么做呢?
答案 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}