Идентификация узлов в гигантском компоненте в igraph с Python

Я пытаюсь обозначить, какие узлы входят в гигантский компонент сети, а какие нет. Я НЕ пытаюсь просто захватить гигантский компонент. Это то, что у меня есть до сих пор:

def in_giant(G):
    giant = G.components().giant().vs["name"]
    return map(lambda x: x in giant, G.vs["name"])

Это медленно. Я подозреваю, что есть что-то быстрое, что можно сделать, работая непосредственно со структурой G.components(). Любые идеи?


person jeffalstott    schedule 05.08.2014    source источник


Ответы (2)


Я не уверен, правильно ли я понял ваш вопрос, но похоже, что вам просто нужен двоичный список (т. е. список, содержащий только True и False), чтобы элемент с индексом i в списке был истина тогда и только тогда, когда соответствующая вершина находится в гигантской компоненте. Ваше решение в порядке, но поскольку оно зависит от NumPy, я решил добавить альтернативу, которая от него не зависит:

def in_giant(G):
    cl = G.components()
    cl_sizes = cl.sizes()
    giant_component_index = cl_sizes.index(max(cl_sizes))
    return [x == giant_component_index for x in cl.membership]
person Tamás    schedule 05.08.2014

Похоже, ответ:

vc = G.components() ##Get VertexClustering object
array(vc.membership)==argmax(vc.sizes) ##argmax(vc.sizes) may always return 0; not sure.
person jeffalstott    schedule 05.08.2014