2012-12-02 5 views
2

두 개의 셀 배열, 1x160 (a) 및 80x1 (b)를 비교하려고합니다. 내 셀 배열은 내부에 여러 문자열이있는 셀로 구성됩니다. 나는 각각의 문자열을 비교하기를 원합니다. 만약 같거나 같다면, 새로운 배열에 삽입하거나 그렇지 않으면 0을 삽입하십시오. 나는 그 어떤 기능도 찾을 수 없다. 나는 'isequal', 'strfind'등을 시도했다. 입력 인수의 세포 배열 인 경우, 첫 번째 문자열의 셀 어레이해야하며 두 번째는 문자 배열해야matlab에있는 두 셀 배열 요소를 비교하십시오.

: 그들 모두는 나에게 다음 오류 메시지를 제공합니다.

여기 내 코드입니다!

function [inter]=Intersect2(a,b) 
int=cell(0); 
b2=[b;b]; 

for i=1:length(a) 
    if a{i,1}==b2{i,1}(1) (or 'isequal','strfind') 
     int{i}=a{i}; 
    else 
     int{i}=0; 
    end  
end 
+0

명확하게하기 위해 두 셀 배열의 [intersection] (http://en.wikipedia.org/wiki/Intersection_ (set_theory))을 찾으려고하지 않고 대신 공통 색인을 통해 일치시킵니다. 옳은? – nicktruesdale

+0

정확히 !!!!!!!!! – Sermilion

답변

8

문자 배열을 비교하는 방법은 여러 가지가 있으며 그 중 하나는 strcmp입니다.

반복을 피하기 위해 cellfun도 사용합니다.

a = {'Dude', 'I', 'am', 'a', 'moose'}; 
b = {'Well', 'I', 'am', 'a', 'mouse'}; 

index = cellfun(@strcmp, a, b); 

그들이 없을 때 논리 어레이 요소가 일치하는 경우이다 1 index0를 반환 b의 해당 요소에 대해 a의 각 요소를 비교한다. 일치하는 값을 할당 할 수

사용이 :

int = cell(1, length(a)); 
int(index) = a(index); 

INT =

[] '나는' '나는' '는'[]

당신은이 개념을 확장 할 수 있습니다 원하는 경우 교차로를 찾으십시오.

+2

문자열을 선택하는 것이 좋습니다. – jerad

+0

좋은 방법이지만 배열의 크기가 다른 경우 어떻게해야합니까? – Sermilion

+0

다릅니다. index-to-index와 일치하는 경우, 다른 하나를 잘라내거나 덧붙여 야합니다. 어쨌든 여분의 데이터는 의미가 없습니다. 교차로처럼 다른 방법으로 일치 시키려면'strcmp'를 사용할 수 있지만 확실히 새로운 코드가 필요합니다. – nicktruesdale

관련 문제