Как использовать 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);