Это вопрос до Issue in deleting supersets in Matlab. в предыдущем вопросе я был удаление суперсетов и сохранением множества вспомогательного, для которого у меня есть рабочий ответ сейчас я хочу, чтобы заменить суперсеты там с подмножествами, а не удалять их, например, я набор данных следующим образом:Как заменить надмножества такими подмножествами в 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));
% Set diagonal to zero.
s = s - diag(diag(s));
% Indicator matrix for sets that are exactly equal.
same = s & s';
% For equal sets keep only the first occurence.
keep = triu(same) | ~same.*s;
% Delete supersets.
similarity = a(~any(keep,1));
celldisp(similarity)
, когда я запускаю выше код выход следующим образом:
a{1} = [5]
a{2} = [1]
a{3} = [11]
a{4} = [16]
a{5} = [14]
я хочу сделать, это заменить супер наборы с подмножествами, а не удалять их:
ожидается выход должен быть следующим:
a{1} = [5]
a{2} = [11]
a{3} = [1]
a{4} = [5]
a{5} = [5]
a{6} = [11]
a{7} = [11]
a{8} = [16]
a{9} = [14]
a{10} = [14]
Пожалуйста, объясните, ожидаемый результат. Почему 'a {4}' 5, а не 16? Имеет ли это значение или должно быть выбрано какое-либо существующее подмножество? – Daniel
, потому что в цикле единственное значение '5' приходит первым, когда мы идем сверху вниз, мы начинаем с пар и опускаемся до одиночных выборов, если в' a {4} 'было' 16', чем было бы '16 'at location' a {4} ' –
Непонятно, что вы спрашиваете. Что такое правило для получения этого вывода? –