Matlab 从矩阵中删除NaN元素

Matlab 从矩阵中删除NaN元素,matlab,Matlab,每行有一个NaN元素,我想删除它 A=[NaN 1 2; 3 NaN 4; NaN 5 6]; 所需输出为: [1 2; 3 4; 5 6] 这里是-请注意代码不是健壮的。它假设每一行中确实有一个NaN元素 虽然它不是一个矢量化的解决方案,但它还有其他优点,比如清晰的代码 for i=1:size(A,1) x = A(i,:); x(isnan(x)) = []; B(i,:) = x; end B B= 1 2

每行有一个NaN元素,我想删除它

A=[NaN  1  2;  
    3  NaN 4;  
   NaN  5  6];  
所需输出为:

[1 2;  
 3 4;  
 5 6]

这里是-请注意代码不是健壮的。它假设每一行中确实有一个
NaN
元素

虽然它不是一个矢量化的解决方案,但它还有其他优点,比如清晰的代码

for i=1:size(A,1)
   x = A(i,:);
   x(isnan(x)) = [];
   B(i,:) = x;
end
B

B=

1     2
3     4
5     6

我以为一行就可以完成,但我错了。请参阅下面的解决方案:

给定(添加的行帮助我调试以下索引):

然后:


顺便说一句,在逻辑索引操作中对数组执行简单逻辑检查的Matlab习惯用法非常常见,非常有用。典型的例子是:

>> x(x>0)   %This returns a 1D column vector of all values of x 
            %which are greater than 0, regardless of the initial
            %size of x.  Multidimensional inputs are unwrapped 
            %column-first

上面的所有内容都是大小和维度处理。

您确定,您的代码是这样的吗?问题的目的是什么
A(isnan(A))=[]
返回
A
的按列数组。当应用
重塑
(注意
sz(A,)
的语法错误)时,它最终交换第一行和第二行的第一个元素。+1矢量化。但同样的警告——每行必须至少有一个nan。
>> A = [NaN 1 2 ; 3 NaN 4; NaN 5 6; 7 8 NaN]
A =
   NaN     1     2
     3   NaN     4
   NaN     5     6
     7     8   NaN
>> Atrans = A';
>> B = reshape(    Atrans(~isnan(Atrans))    ,[],size(Atrans,2))'
B =
     1     2
     3     4
     5     6
     7     8
>> x(x>0)   %This returns a 1D column vector of all values of x 
            %which are greater than 0, regardless of the initial
            %size of x.  Multidimensional inputs are unwrapped 
            %column-first