我有一个包含很多NaN的单元格数组。但是无论出于什么原因,isnan
函数都无法检测到它们(因此cellfun(@(Iarray) any(isnan(Iarray)),Iarray);
不起作用),所以我认为实际上是包含NaN
的字符串。
我在此数组上执行两件事:清理空的行和列,并删除NaN(尝试这样做)。
因此,我想用空单元格替换所有NaN,然后使用isempty
函数执行清理所有空单元格的操作。我将使用循环和if char(x(i,j))=='NaN'
。
所以我的问题来了,我想清空一个单元格,然后使用isempty
函数检测该单元格,但是我不知道如何操作。我已经尝试过x(1,2)= []
,x(1,2)= {[]}
,x(1,2)=''
,但是没有一个给出1
的{{1}}。
有人知道如何解决我的问题吗? 预先感谢!
答案 0 :(得分:2)
如果要清空单元格的内容,可以使用:
x{1,2} = [];
使用括号()
和括号{}
进行索引编制是有区别的。您可以将一个单元格数组视为一个单元格数组,每个单元格包含一个诸如1 ,2 , []
之类的值。当用括号将一个单元格索引时,它以单元格(或更准确地说是一个类型为单元格的数组)返回结果,但是当用括号索引时,它返回该单元格的 content (或更精确地为comma separated list,其中包含已索引单元格的内容)。因此,当您编写这样的表达式时:
x(1,2) = [];
它从单元格数组中删除第二个元素,其行为类似于索引其他数组类型。例如,当您要删除a = [1 2 3]
的第二个元素时,可以使用a(2)=[]
。
但是,当您编写x{1,2} = [];
时,它会访问单元格的 content 并将其设置为类型为double的空数组[0 x 0]
。
同样,a={}
是一个[0 x 0]
个单元格的空数组,而b={[]}
是一个[1 x 1]
个单元格的数组,其第一个元素包含一个空数组[0 x 0]
键入double。当您使用isempty(b)
时,它返回false
,因为它包含一个元素;当您使用isempty(b(1))
时,它返回false
,因为b(1)
返回了一个包含元素,但是当您使用isempty(b{1})
时,它会返回true
,因为{}
运算符提取的第一个单元格为空数组的内容。
简而言之,可以使用()
和{}
来访问单元,并且根据情况[]
具有不同的功能:a)
删除元素b)
空数组。