я имею набор данных, состоящие из наборов я хочу, чтобы удалить супер наборы, для которых подмножества присутствуют следующие:Проблемы при удалении суперсетов в Matlab
a{1} = [5]
a{2} = [4 11 14]
a{3} = [1]
a{4} = [5 16]
a{5} = [5]
a{6} = [11 16]
a{7} = [11]
a{8} = [16]
a{9} = [9 14 17]
a{10} = [14]
[ii, jj] = ndgrid(1:numel(a));
s = cellfun(@(x,y) all(ismember(x,y)), a(ii), a(jj));
s = triu(s,1); %// count each pair just once, and remove self-pairs
similarity = a(~any(s,1));
celldisp(similarity)
результата выглядит следующим образом:
a{1} = [5]
a{2} = [4 11 14]
a{3} = [1]
a{4} = [11 16]
a{5} = [11]
a{6} = [16]
a{7} = [9 14 17]
a{8} = [14]
как выход показывает, что по-прежнему суперсетами, которые должны быть удалены, поскольку a{2}
т.е. a{5}
содержит 11
, который является его подмножество, a{4}
должны быть удалены, поскольку a{5}
содержит 11
и a{6}
, содержат 16
, а также a{7}
, так как a{8}
содержит подмножество 14
.
ожидается выход
a{1} = [5]
a{2} = [1]
a{3} = [11]
a{4} = [16]
a{5} = [14]
кто может помочь, как исправить этот код, чтобы я мог получить точный набор результатов. спасибо
Не могли бы вы записать ожидаемый результат? – Divakar
@Divakar Я обновил свой вопрос с ожидаемым выходом –