如何在matlab中用另一行不同长度的行替换一行矩阵?

时间:2016-07-14 07:05:51

标签: matlab

我有一个2X3矩阵。我想用另一行(两列宽)替换第2行(三列宽)。如果新行在第三列中有NaN,我没关系。

例如,在这段代码中,x是两列宽,我想用x替换矩阵“list”的第二行。

list=[1,2,3;4,5,3];
if numel(setdiff(list(1,:),list(2,:)))~=0;
x=setdiff(list(1,:),list(2,:));
list(2,:)=x; %this is where i get error
end

感谢

2 个答案:

答案 0 :(得分:0)

用这个替换错误的行:

list(2,:)=[x NaN*ones(1,size(list,2)-size(x,2))]

您要比较listx的列。形成 1xdifference_of_columns 的矩阵,包括所有的矩阵,然后乘以NaN,从而形成具有相同顺序的矩阵,并且所有元素随后被附加NaN使用x创建一个与原始list矩阵列数相同的行。

答案 1 :(得分:0)

如果您的新值始终小于原始值,则可以尝试:

list=[1,2,3;4,5,3];
if numel(setdiff(list(1,:),list(2,:)))~=0;
     x=setdiff(list(1,:),list(2,:));
     list(2,:)=nan(size(list(2,:)));
     list(2,1:length(x))=x; 
end

然而,我并不喜欢这个解决方案,因为它不是rubust。我更喜欢使用细胞结构:

list=[{[1,2,3]};{[4,5,3]}];
if numel(setdiff(list{1,:},list{2,:}))~=0;
   x=setdiff(list{1,:},list{2,:});
   list{2,:} = [];
   list{2,:}=x; %length of this row is now arbitrary
end