我有一个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
感谢
答案 0 :(得分:0)
用这个替换错误的行:
list(2,:)=[x NaN*ones(1,size(list,2)-size(x,2))]
您要比较list
和x
的列。形成 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