2016-07-14 2 views
0

2X3 매트릭스가 있습니다. 나는 행 2 번 (3 열 너비)을 2 열 너비의 다른 행으로 대체하려고합니다. 새 행에 세 번째 열에 NaN이 있으면 괜찮습니다.matlab에서 다른 길이의 다른 행으로 행렬을 대체하는 방법은 무엇입니까?

예를 들어이 코드에서 x는 2 열이고 두 번째 행렬을 "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

그냥 패드 : '목록 오류가 계속 발생하면'x'가 실제로 행 벡터이고 열이 아닌지 확인하십시오 (2, :) = [x NaN (1, size (list, 2) -length (x))] 벡터 – BillBokeey

+0

@BillBokeey! ** 열 수 *** 사이의 차이 (행이 아님). 당신의 솔루션은 정확합니다! –

답변

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하지 않기 때문에 내가 정말이 솔루션을 좋아하지 않는다. I 세포 구조 작업을 선호 :

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 
당신의 벡터가`list``의 행 수의 차이와 x``의 길이를 계산하여 충분히`NaN`와 x`
0

이 함께 잘못된 라인을 교체 : 여기

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

당신은 listx의 열을 비교된다. 1xdifference_of_columns의 행렬은 모든 행들로 구성되고 그 다음에 NaN과 곱 해져서 동일한 순서로 행렬이 형성되고 모든 원소는 NaN과 같이 형성되고 그 다음에 x가 부가되어 같은 열수의 행을 생성한다 원래 list 매트릭스의 것입니다.

+0

감사합니다 .... 귀하의 답변은 도움이되었습니다. 친애하는 –

관련 문제