查找同时包含整数和 NaN 的列

Finding columns that contain both integers and NaN

我有一个包含数值(浮点)和分类值(整数)的矩阵

作为

A = 1   NaN   2.2   3.2  4
    NaN 7.9   5.1   NaN  5
    3    5.5  NaN   4.1  NaN

我想把它分成矩阵; 一个包含 Int 值,另一个包含 float 值,如

 it = 1   4
      NaN 5
      3   NaN

  flt = NaN  2.2 3.2
      7.9  5.1 NaN
      5.5  NaN 4.1

我使用下面的代码

int_cols = all( round(A)==A, 1 ); %// logical indexing into integer columns
it = A(:,int_cols);
flt = A(:,~int_cols);

但是,NaN 不等于 NaN,因此它出现在 flt 矩阵中并且它 = [].

有什么功能可以帮助吗?

你可以使用这样的东西,

A = [1   NaN   2.2   3.2  4;
     NaN 7.9   5.1   NaN  5;
     3    5.5  NaN   4.1  NaN];
B = isnan(A);
A(B) = 0;
int_cols = all( round(A)==A, 1 );
A(B) = NaN;
it = A(:,int_cols);
flt = A(:,~int_cols);

如果您将 all 函数更改为条件 isnan(A)|round(A)==A,您将获得预期的输出。在这种情况下 NaNs 基本上被忽略了,因为在用 NaNs 填充的列的任何行中有一个浮点数仍然 return 为假,但是 [=14=一列整数中的 ]s 仍将 return 为真。需要注意的是,如果你有一列完全是 NaNs,它将显示为一个整数。

以你的例子为例:

A = [1   NaN   2.2   3.2  4;
     NaN 7.9   5.1   NaN  5;
     3    5.5  NaN   4.1  NaN];
int_cols = all(isnan(A)|round(A)==A,1);
it = A(:,int_cols);
flt = A(:,~int_cols);

在此之后,

it = 1   4
     NaN 5
     3   NaN

flt = NaN  2.2 3.2
      7.9  5.1 NaN
      5.5  NaN 4.1