假设我有以下数组:
a = {1; 'abc'; NaN}
现在我想找出其中包含 NaN 的索引,以便我可以用 '' (空字符串)替换它们。
如果我使用cellfun
withisnan
我得到一个无用的输出
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}
。
我在http://www.mathworks.com/matlabcentral/answers/42273上找到了答案
a(cellfun(@(x) any(isnan(x)),a)) = {''}
不过,没看懂……
a(ind) = []
将从数组中删除条目a(ind)= {''}
将替换为NaN
空字符串。如果要删除条目,请使用= []
而不是= {''}
.
如果您想NaN
用不同的值替换 s,只需使用花括号将其设置为等于该值:
a(ind) = {value}