как узнать, сколько наборов имеют элементы только из другого набора - PullRequest
2 голосов
/ 12 декабря 2011

Я ищу эффективный способ определить, сколько наборов состоит из других элементов набора в Matlab.

Пример: U = {[1 2], [2 3], [3 4], [4 5], [5 6], [6 7], [1 7], [1 9], [3 9], [6 8], [8 9], [4 9], [5 8]}; V = [1 2 3 4 9];

[1 2], [2 3], [3 4], [1 9], [3 9], [4 9] так ответьте: 6 наборов состоят из V элементов набора

как это получить?

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011
 U2=U(cellfun(@(x) all(ismember(x,V)),U));

Результат:

 U2{:}

ans =
     1     2
ans =
     2     3
ans =
     3     4
ans =
     1     9
ans =
     3     9
ans =
     4     9
0 голосов
/ 12 декабря 2011

Вы можете использовать логическое индексирование для решения этой проблемы:

U={[1 2],[2 3],[3 4],[4 5],[5 6],[6 7],[1 7],[1 9],[3 9],[6 8],[8 9],[4 9],[5 8]};
V=[1 2 3 4 9];
Um=cell2mat(U');
A=Um(ismember(Um(:,1),V)&ismember(Um(:,2),V),:);
...