Building (and working with) bipartite graphs

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Building (and working with) bipartite graphs

dawe
Hi,
I'm trying to build a bipartite graph from a MxN array. So far I've been able to do this:

# adjacency is the original np.array

S = []
E = []
W = []
for x in range(adjacency.shape[0]):
    for y in np.where(adjacency[x] > 0)[0]:
        S.append(x)
        E.append(y + adjacency.shape[0]) # so that node index starts with an offset)
        W.append(adjacency[x, y])

g = gt.Graph(directed=True)

g.add_edge_list(np.hstack([np.array(S)[:, None], np.array(E)[:, None]]))

ew = g.new_edge_property("double")
ew.a = W
g.ep['weight'] = ew

recs = [g.ep.weight]
rec_types = ['real-exponential']

state = gt.NestedBlockState(g, state_args=dict(recs=recs,
                                    rec_types=rec_types))

[…]

I'm pretty sure this is not the most efficient way to go, but gt.is_bipartite(g) returns True. Can anybody suggest a more straightforward approach? Also, is it necessary to specify a VertexPropertyMap with node type (i.e. M or N)?
Anyhow, after I had the graph and the final model, I tried to draw:

gt.draw_hierarchy(state, layout='bipartite')

but I get this error

IndexError
                                Traceback (most recent call last)

<ipython-input-67-d7655416181e> in <module>
----> 1 gt.draw_hierarchy(state, layout='bipartite')



~/anaconda3/envs/schist/lib/python3.8/site-packages/graph_tool/draw/cairo_draw.py in draw_hierarchy(state, pos, layout, beta, node_weight, vprops, eprops, hvprops, heprops, subsample_edges, rel_order, deg_size, vsize_scale, hsize_scale, hshortcuts, hide, bip_aspect, empty_branches, **kwargs)
   1773
                                   rel_order_leaf=True)

   1774     elif layout == "bipartite":
-> 1775
         tpos = get_bip_hierachy_pos(state, aspect=bip_aspect,

   1776
                                     node_weight=node_weight)

   1777         tpos = t.own_property(tpos)



~/anaconda3/envs/schist/lib/python3.8/site-packages/graph_tool/draw/cairo_draw.py in get_bip_hierachy_pos(state, aspect, node_weight)
   2145         t.add_edge(root, p2)
   2146         for p in ps:
-> 2147             if bc.a[tb[p]] == 0:
   2148                 t.add_edge(p2, p)
   2149             else:



IndexError
: index 1 is out of bounds for axis 0 with size 1



Any help is appreciated

d

_______________________________________________
graph-tool mailing list
[hidden email]
https://lists.skewed.de/mailman/listinfo/graph-tool
Reply | Threaded
Open this post in threaded view
|

Re: Building (and working with) bipartite graphs

Tiago Peixoto
Administrator
Am 09.07.20 um 14:37 schrieb Davide Cittaro:> I'm pretty sure this is
not the most efficient way to go, but gt.is_bipartite(g) returns True.
Can anybody suggest a more straightforward approach? Also, is it
necessary to specify a VertexPropertyMap with node type (i.e. M or N)?
You're probably better off with doing something like:

   idx = adjacency.nonzero()
   edges = array([idx[0], idx[1], adjacency[idx]]).T
   edges[:,1] += edges[:,0].max() + 1 # offset bipartition
   g.add_edge_list(edges, eprops=[weight])

> Anyhow, after I had the graph and the final model, I tried to draw:
>
> gt.draw_hierarchy(state, layout='bipartite')
>
> but I get this error

In order for us to investigate further you need to provide us with a
minimal working example, not only the error message.

Best,
Tiago
--
Tiago de Paula Peixoto <[hidden email]>


_______________________________________________
graph-tool mailing list
[hidden email]
https://lists.skewed.de/mailman/listinfo/graph-tool

signature.asc (849 bytes) Download Attachment
--
Tiago de Paula Peixoto <tiago@skewed.de>
Reply | Threaded
Open this post in threaded view
|

Re: Building (and working with) bipartite graphs

dawe
Hi Tiago,
thanks for the answer

> On 9 Jul 2020, at 16:45, Tiago de Paula Peixoto <[hidden email]> wrote:
>
> In order for us to investigate further you need to provide us with a
> minimal working example, not only the error message.

I can give you the NestedBlockState produced from the previous message

https://www.dropbox.com/s/wefsq6n97g00a3o/bipartite.pkl?dl=0

d

_______________________________________________
graph-tool mailing list
[hidden email]
https://lists.skewed.de/mailman/listinfo/graph-tool