如何创建一个删除NaN值的新数组?

时间:2013-06-03 15:36:04

标签: matlab

我有一个大小为[672 x 8]的2D数组,其中我有几行,其中第一列和第二列中有一个值,另一行中有一个NaN值。还有其他行在所有列中都有值。我想创建两个新数组,这样第一个数组只包含其中包含NaN的元素,第二个数组中没有NaN元素。

例如

第12行:

517 2850 NaN NaN NaN NaN NaN NaN

第13行:

652 2037 169 2243 44 2443 -2 2644

1 个答案:

答案 0 :(得分:4)

尝试使用isnan

TF = isnan(A)返回一个与矩阵A大小相同的数组,其中包含逻辑“1”(true),其中A的元素为NaN s,并且逻辑“0”(false)它们不是(顺便说一句,对于复数zisnan(z)返回true,无论是实部还是虚部如果实部和虚部都是有限的或z),则NaNfalseInf

关于您的具体任务,要将原始矩阵拆分为两个,请执行以下操作:

TF = isnan(A);               %// Determine which elements are NaNs
nan_rows = any(TF, 2);       %// Determine rows that contain NaNs
B1 = A(nan_rows, :);         %// Rows with NaN values
B2_nonans = A(~nan_rows, :); %// Rows without NaN values