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}