MATLAB:如何从矩阵中有效地去除NaN元素

Ber*_* U. 20 matlab

我正在寻找一种方法在MATLAB中有效地从矩阵中删除NaN数(即不使用for循环)

我将提供一个简单的例子来说明我想要实现的目标:

说我有一个矩阵M:

          3.00          1.00
          1.00          3.00
           NaN           NaN
          3.00          3.00
          1.00          1.00
           NaN           NaN
           NaN           NaN
           NaN           NaN
           NaN           NaN
           NaN           NaN
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法来改变它

          3.00          1.00
          1.00          3.00
          3.00          3.00
          1.00          1.00
Run Code Online (Sandbox Code Playgroud)

我目前正试图通过M(isfinite(M))来做这个,但最终返回一个向量而不是矩阵.有没有让它返回矩阵的技巧?

Jer*_*ock 26

如果每行都没有NaN或所有NaN,则可以使用以下方法执行删除:

M(isfinite(M(:, 1)), :)
Run Code Online (Sandbox Code Playgroud)


小智 19

最好的方法是

M(any(isnan(M),2),:)=[]
Run Code Online (Sandbox Code Playgroud)

这将删除包含至少一个NaN的任何行.