MATLAB的新手,对此有任何帮助将不胜感激。
我的数据集是1列中的1000个元素,大多数元素都是数字,但有些是NaN。有没有办法,1。找到它们,然后2.删除它们并将它们放入变量中(或者只是删除它们)?
我是否必须以相反的方式执行此操作并查找并删除非NaN(数字)并将其存储在变量中?
答案 0 :(得分:3)
使用逻辑索引来提取非NaN的元素,然后将它们存储在您喜欢的任何位置。这是它的工作原理。如果x是包含NaN的列向量,y = ~isnan(x)
将给出逻辑向量y,使得| y | = | x |如果x(1)不是NaN,则y(i)为1。您可以使用此逻辑向量来提取非NaN元素:
x = [1 2 3 NaN 5 6 NaN NaN 9];
y = ~isnan(x); % now y is [1 1 1 0 1 1 0 0 1]
x = x(y) % now x is [1 2 3 5 6 9]
逻辑索引功能强大且高效。你也可以说:
x = [1 2 3 NaN 5 6 NaN NaN 9];
x(isnan(x)) = -1 % now x is [1 2 3 -1 5 6 -1 -1 9]
有关逻辑索引的更多信息,请参阅官方Matlab文档here。
答案 1 :(得分:1)
相当于@ sadeghmir回答的选项:
x = [1 2 3 NaN 5 6 NaN NaN 9];
x(x==NaN)=[];
>x
1 2 3 5 6 9