在MATLAB中从向量中删除NaN

时间:2016-03-09 16:52:52

标签: matlab

我想从两个向量中移除nans,向量必须具有相同的长度,因此如果我在一个向量中移除nan,则即使它不是nan,也必须移除另一个向量中的对应值。例如:

x = [1 nan 3 4 5]
y = [6 7 8 nan 10]

我想删除x中的nan,以及y中的7。此外,我想删除y中的nan和x中的4,这样矢量保持相同的长度。这个问题类似于这里提到的问题MATLAB: How To Efficiently Remove NaN Elements from Matrix,但我是MATLAB的新手,我不确定如何用向量而不是矩阵做同样的事情。谢谢您的帮助。

3 个答案:

答案 0 :(得分:4)

这将确保您的向量x和y保持彼此相同的大小,但也确保您只有(x,y)对有意义。

ind = ~isnan(x) & ~isnan(y) ;
xn = x(ind);
yn = y(ind);

答案 1 :(得分:1)

尝试以下方法:

x = [1 nan 3 4 5]
y = [6 7 8 nan 10]
id1 = find(isnan(x));
id2 = find(isnan(y));
x([id1,id2]) = []
y([id1,id2]) = []

输出:

x =
     1     3     5
y =
     6     8    10

说明:

find(isnan(x));

x中创建索引为NaN的向量。我们对y也一样。然后,我们使用[id1,id2]连接两个向量。最后,x([id1,id2]) = []从存在NaN的向量中删除元素。

答案 2 :(得分:1)

内存管理和速度最有效的解决方案是使用逻辑索引从现有阵列中删除值,而不是创建新阵列。

xn = isnan(x); yn = isnan(y); % find the locations of the NaNs
x(xn | yn) = []; % delete elements from x that are NaN in x OR y
y(xn | yn) = []; % delete elements from y that are NaN in x OR y

但除非你有非常大的数组,否则你不会注意到性能差异。