Hi all,
I continue with the probably silly questions..
I have a graph that is relatively large (1.6 million vertices, 2.4 million
arcs). I extract the largest strong component, but it is still quite large
(~400,000 vertices) and while the "analysis" algos work smoothly, when it
comes to representing it, it's very sparsely connected, so essentially a
huge cloud of points.
So I am trying to extract the second largest strong component, which is way
smaller. I do the following:
comp, hist = label_components(g)
idx = argsort(hist)
idx_second_largest = idx[-2]
idx_vertices_second_largest = find(comp.a == idx_second_largest)
u = GraphView(g, vfilt=idx_vertices_second_largest)
To make things easier, I'll paraphrase the example from the doc.
g2=random_graph(100, lambda: (1,1))
comp,hist=label_components(g2)
print hist
[11 28 41 17 3]
So my second largest strong component should be the one with elements
labelled 1.
print comp.a
[0 1 1 2 3 2 2 0 0 2 1 3 3 0 3 1 4 0 2 2 1 3 2 1 2 2 2 2 2 1 2 1 3 1 2 2 1
2 3 2 2 0 2 2 4 2 3 2 2 3 1 1 2 1 1 2 1 1 2 4 2 1 0 1 2 1 1 3 2 2 2 1 3 3
1 2 1 1 0 0 2 2 2 3 3 3 2 2 2 2 1 2 3 0 1 1 2 1 0 3]
Using the code above gives, finally
print idx_vertices_second_largest
[ 1 2 10 15 20 23 29 31 33 36 50 51 53 54 56 57 61 63 65 66 71 74 76 77 90
94 95 97]
But when I use this as u = GraphView(g2,
vfilt=idx_vertices_second_largest), I get an error that ends with
File "/usr/local/lib/python2.7/dist-packages/graph_tool/__init__.py", line
527, in __get_set_f_array
a[:] = v
ValueError: operands could not be broadcast together with shapes (100) (4)
So as far as picking up the indices, I seem to be right, but after that,
problem.. Where am I being silly? (Coming from classic C, my first reaction
is "what should I typecast to?".)
Thanks!
attachment.html (2.64 KB)