2014-10-12 1 views
1

나는 벡터가있다. as=[1 3 4]과 나는 30 by 30 셀 배열을 가진다. 벡터 as의 요소가 각 셀의 요소와 교차하는지 여부를 확인하고 싶습니다. 그렇다면, 나는 세포의 지표를 찾고 싶다.벡터와 벡터 배열의 교차점을 MATLAB에서 찾는다.

+0

셀 배열의 각 셀은 '1 x 3'숫자 배열입니까? – Divakar

+0

예, 수치 배열입니다 – joanna

+0

그리고 'intersect'로, 대신'평등 '을 의미하지 않습니까? 아니면 교차 어떻게 정의하겠습니까? – Divakar

답변

1

cellarr 가정하면이 방법은 당신을 위해 작동하는지 확인, 입력 셀 어레이 할 수 -

%// Find intersecting elements for each cell 
int_idx = cellfun(@(x) intersect(x,as),cellarr,'UniformOutput', false) 

%// Find non empty cells that denote intersecting cells. 
%// Then, find their row and column indices 
[row_ind,col_ind] = find(~cellfun('isempty',int_idx)) 

ismember 또 다른 방법은 각 셀 간의 일치를 찾을 수 및 세포 내 any 일치하는 경우, 그것의 인덱스를 찾을 수 -

[row_ind,col_ind] =find(cell2mat(cellfun(@(x) any(ismember(x,as)),cellarr,'un', 0))) 

그리고 또 다른 -

%// Vertically concatenate all numeric array from cells 
vertcat_cells = vertcat(cellarr{:}) 

%// Get all good matches 
matches = any(any(bsxfun(@eq,vertcat_cells,permute(as,[1 3 2])),2),3) 

%// Reshape matches into the size of cellarr and get indices of matches 
[row_ind,col_ind] = find(reshape(matches,size(cellarr))) 
+1

접근 방법 중 어느 것이 가장 효율적으로 작동하는지 보는 것이 흥미로울 것입니다 (성능면에서). – Divakar

+0

첫 번째 코드를 시도했지만 완벽하게 작동합니다! – joanna

+0

이전의 코드 대신 1 행 대신 셀의 각 행에 대한 교차를 찾을 수 있도록 어떻게 이전 코드를 확장 할 수 있습니까? – joanna