2014-08-05 1 views
2

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

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

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

ответ

5

Я не уверен, если я правильно понимаю ваш вопрос, но мне кажется, что вы просто нужен двоичный список (т.е. список, содержащий 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] 
1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^