2010-12-14 2 views
2

아래 데이터를 사용하여 finalAnswer와 동일한 문자열을 찾을 수 없습니다. 제발, if/for 루프를 사용할 수 없습니다! 최종 답변이 mainData의 마지막 두 열을 기반 finalAns (에 일치하는지 mainData의 각 행 엔트리를 얻기 위해 배열로서, 각 요소 (mainData의 즉 포맷)세포 대 매트릭스 매칭/map/cellOperations (MATLAB)

mainData = {'IBM' [201] [1] ; 
      'GE' [403] [1] ; 
      'MSFT' [502] [3] ; 
      'GM' [101] [2]  } ; 

finalAns = [ 101 2 0.5; 403 1 0.6 ]     ; 

%% I tried doing this -> 
temp = cell2mat(mainData(:,[2 3])) ; 

tf = ismember(temp, finalAns(:,[1 2],'rows') ; 
secIDs = mainData(tf) ; 
+0

정확히 출력으로 원하십니까? 두 번째와 세 번째 컬럼이'finalAns'에서 엔트리와 매치되는'mainData' 행만을 선택하려고합니까? – gnovice

+0

Thnx. 나는 대답을 다음과 같이 선호한다 : 'GM'[101] [2] [0.5]; 'GE'[403] [1] 0.6] – Maddy

+0

OR -> 'GM'[101 2 0.5]; 'GE'[403 1 0.6] – Maddy

답변

2

으로 바람직 그리고 그들이 finalAns과 추가 finalAns의 마지막 열이 표시되는 순서대로 규칙을 finalAns의 처음 두 열을) 얻을, 당신은이 작업을 수행 할 수 있습니다

>> temp = cell2mat(mainData(:,2:3)); 
>> [isThere,index] = ismember(finalAns(:,1:2),temp,'rows'); 
>> output = [mainData(index(isThere),:) num2cell(finalAns(isThere,3))] 

output = 

    'GM' [101] [2] [0.5000] 
    'GE' [403] [1] [0.6000] 

출력은 2 부산물이다 4 셀 배열을 별도의 셀에 각 값으로 저장합니다. 지난 3 열이 벡터에서 수집하려는 경우, 당신은이 위에서 output의 계산을 대체 할 수

>> temp = [temp(index(isThere),:) finalAns(isThere,3)]; 
>> output = [mainData(index(isThere),1) num2cell(temp,2)] 

output = 

    'GM' [1x3 double] 
    'GE' [1x3 double] 

참고 이제 2에 의해-2 셀 어레이가 그 곳에 두 번째 세포 열에는 1x3 크기의 이중 배열이 들어 있습니다.

+0

완벽한! .csv 파일로 출력 할 수있는 2 * 4 셀 배열이 필요했습니다. 고마워요. – Maddy