2016-03-03 76 views
0

MATLAB新手,对此有任何帮助将不胜感激。如何从数据集中删除NaN值?

我有一个数据集,在1列中有1000个元素,大多数元素是数字,但有些是NaN。有办法我可以,1.找到他们,并2.删除他们,并把他们在一个变量(或只是删除他们)?

我是否必须以相反的方式做到这一点,找到并删除非NaN(数字)并将它们存储在变量中?

+0

看一看MATLAB命令 “isnan”。 – mhopeng

回答

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

一个选项相当于@ sadeghmir的回答是:

x = [1 2 3 NaN 5 6 NaN NaN 9]; 
x(x==NaN)=[]; 

>x 
1 2 3 5 6 9