[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] connecting disparate graphs

From: Tamas Nepusz
Subject: Re: [igraph] connecting disparate graphs
Date: Tue, 27 May 2008 15:43:39 +0200

Hi Kurt,

for example. i want to merge G1 and G2 into one big graph. However, the web crawls are seperated by time, so the edges incident to G1.vs[0] /= G2.vs[49] necessarily. So i figure i just want to include all connections for both graphs into one new node

Anyway, is there any igraph functions that might help????
Graph.union is able to take the union of two (or more) graphs, assuming that the vertices being united have the same IDs:

In [1]: g1=Graph([(0,1), (1,2), (2,3), (3,0)])
In [2]: g2=Graph([(0,2), (1,3)])
In [3]: g3=g1.union(g2)
In [4]: g3.get_edgelist()
Out[4]: [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

Since this does not hold for your graph, I suggest a different approach:

1. Get the uids of the first and the second graph and store them in two lists:
uids1, uids2 = g1.vs["uid"], g2.vs["uid"]

2. Create a dict that maps vertex IDs in g2 to vertex IDs in g1 based on the uids:
mapping = {}
for i, uid in enumerate(uids2): mapping[i] = uids1.index(uid)
(this assumes that every uid in uids2 is to be found in uids1; if not, you have to add an exception handler around uids1.index and add the missing vertices to g1 as well)

3. Get the edge list of g2 and remap it according to the mapping obtained in step 2: el_remapped = [(mapping[v1], mapping[v2]) for v1, v2 in g2.get_edgelist()]

4. Add the remapped edges to g1:
g1 += el_remapped

I hope it works, I did not try it, but I think the basic idea is correct. If your edges also carry attributes, you'll have to add them to the new edges in g1 afterwards.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]