Как использовать splitapply/findgroups на кластерных / непоследовательных графах?

Мне нужно реализовать функцию splitapply для непоследовательного индекса узла в графе.

Я реализовал функцию splitapply на графе, который имеет непоследовательные кластеры. Индексные номера возвращаемых кластеров были последовательно пронумерованы, но вершины графа не пронумерованы последовательно. Я хочу, чтобы он возвращал точные индексы узлов из исходного графика.

S={' 1',' 1',' 2',' 6',' 6',' 8'};
T={' 2',' 3',' 3',' 8',' 9',' 9'};
weight=[2; 2; 2; 2; 2; 2];
G=graph(S,T,weight);

plot(G)
bins=conncomp(G);
clusters = splitapply(@(x) {x}, 1:numnodes(G), bins);

Фактические результаты: clusters: [1,2,3];[4,5,6]
Ожидаемые результаты: clusters: [1,2,3];[6,8,9]

примерный график

1 ответ

После вашего кода попробуйте что-то вроде

nodes = table2array(G.Nodes);
result = cellfun(@(x) nodes(x), clusters, 'uniformoutput', false);
Другие вопросы по тегам