Matlab 从矩阵中删除NaN元素
每行有一个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
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