2014-07-20 3 views
0

double matrix B에는 C1C2 코드 (반복되지 않음)가 있습니다. C2에는 각각 C3의 값이 지정됩니다.Matlab의 코드 변경을 인식하는 새 변수 만들기

% C1  C2 C3 
B=[ 1998 22 37 
1998 34 7 
1998 76 12 
1998 98 29 
1998 107 14  
…] 

이 내가 B에 도착하는 방법입니다

N1=[N{:,1} N{:,2} N{:,3}]; 
N1=unique(N1(:,1:3),'rows'); 
N3= unique(N1(:,1:2),'rows'); 
for m=1:size(N3,1) 
    N3(m,3)=sum(N1(:,1) == N3(m,1) & N1(:,2)==N3(m,2)); 
end 
B=N3((N3(:,1) == 1998),:); 

나는 수평 R1에 배치 년과 cell-array A을 가지고 Y에 값을 해제 반복하고 따라 열에 코드 대응. 코드는 C2의 코드와 일치하며 변수는 B입니다.

A={Y 1996 1997 1998 1999 %R1 
1 107 107 22 22 
13 98 98 76 1267 
… } 

내가 변수 A에서 코드의 변화를 인식하는 새로운 변수를 얻을 수있는 방법이 있나요 및 BC3에서 해당 값을 제공한다? 예를 들어 :

AB={Y Initial C2 Change C2 
1 107 14 22 37 
13 98 29 76 12 } 
+0

죄송합니다. 이전 의견을 잊어 버렸습니다 ... 변수 A에서 몇 년 사이에 변경되는 코드를 찾고 해당 값을 표시하기 위해 B에서 찾습니다. –

+0

@ 예. 나는 B에서 그들을보고 변경 전후에 대응하는 값 (C3)을 얻고 싶다. – user3557054

+0

나는 네가 여기서 무엇을 묻는 지 알아 내기가 약간 힘들다. N1이 바뀌는 지표를 찾고 싶다는 뜻인가? 'unique '에 1 개 이상의 출력이있을 가능성이 있습니다. ''a''가 유일하게''M''에서''a''가 처음으로 나타나는 색인''a''에서''a, b, c '= unique (M,'first ' 'M','c'는'M = a (c)'로 표시됩니다. – patrik

답변

0
AB = {'Y' 'Initial' 'C2' 'Change' 'C2'}; % initialize result cell array 

for i=2:size(A,1) % loop through rows of A 

    indicesOfChanges = find(diff([A{i,2:end}])); % find changes in row 

    for j=1:length(indicesOfChanges) % for all changes look up the corresponding values 
     ind1=find(B(:,2)==A{i,indicesOfChanges(j)+1}); % row index in B of value before change 
     ind2=find(B(:,2)==A{i,indicesOfChanges(j)+2}); % row index in B of value after change 
     AB{end+1,1} = A{i,1}; 
     AB{end,2} = B(ind1,2); 
     AB{end,3} = B(ind1,3); 
     AB{end,4} = B(ind2,2); 
     AB{end,5} = B(ind2,3); 
    end 

end 

은 어쩌면이 더 벡터화 된 접근 방식을 사용하여 개선 될 수 있지만, 한 당신의 배열이 너무 큰 아니기 때문에 그것은 루프를 사용하여 충분히 빠르게 작동합니다.

+0

늦은 응답을 드려서 죄송합니다. 코드가 100 % 작동하지 않습니다. 행렬 크기에 문제가 있기 때문입니다. 그러나 지금부터 살펴 보겠습니다. 감사합니다 – user3557054

+0

안녕하세요. 코드를 수정했습니다. 색인 생성 문제가 있다고 말한대로. 설명 된대로 데이터 A와 B를 설정하면 AB가 표시됩니다. –

+0

필자의 데이터에 약간의 변경을가했습니다. (예제와 약간 다르기 때문에) 코드를 시도했는데 루프가 처음 9 개의 행에서 작동하고 '매트릭스 치수가 일치해야합니다.'라는 오류가 발생합니다. 내 이중 배열 B 321 행 동안 내 셀 배열 A 4000 행이 있습니다. 그 때문에 그렇게 생각하니? 고맙습니다. – user3557054

관련 문제