是否有任何通用的方法从矩阵中删除NaNs?

Chr*_*s33 3 matlab matrix nan

是否有任何通用的方法从矩阵中删除NaNs?有时我会在某些代码中遇到这个问题,然后它会产生问题以获得适当的输出.是否有任何方法可以生成任何类型的检查以避免在MATLAB代码中出现NaN?如果有人能够给我一个与之相关的一些想法,那将会非常有帮助.

Adr*_*aan 5

您可以使用以下isnan函数检测nan值:

A = [1 NaN 3];
A(~isnan(A))
     1  3
Run Code Online (Sandbox Code Playgroud)

这实际上消除了nan值,但是这并不总是可行的,例如

A = [1 nan; 2 3];
A(~isnan(A))

     1
     2
     3
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这会破坏矩阵结构.您可以通过首先预先分配并从而将nan值设置为零来避免这种情况:

B = zeros(size(A));
B(~isnan(A))=A(~isnan(A))

B =

     1     0
     2     3
Run Code Online (Sandbox Code Playgroud)

或者,覆盖我们原来的矩阵 A

A(isnan(A))=0
A =
     1     0
     2     3
Run Code Online (Sandbox Code Playgroud)