igraph-help
[Top][All Lists]
Advanced

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

Re: [igraph] Re: graph.knn in python


From: Tamás Nepusz
Subject: Re: [igraph] Re: graph.knn in python
Date: Mon, 7 Feb 2011 23:14:34 +0100

Hi Simone,

> can this be considered a valid substitute of the knn function?
> 
> vs = g.vs()
> vcount = g.vcount()
> neisets = [set(g.neighbors(i)) for i in xrange(vcount)]
> deg = [g.degree(i) for i in xrange(vcount)]
> for u in vs:
>       neiavedeg = []
>       for v in neisets[u.index]:
>               neiavedeg.append(deg[v])    
>       u["neideg"] = (sum(neiavedeg) / float(len(neiavedeg)) if len(neiavedeg) 
> > 0 else 0)
I've simplified your code a bit:

deg = g.degree()
for u in g.vs:
    neiavedeg = [deg[v] for v in g.neighbors(u)]
    u["neideg"] = (sum(neiavedeg) / float(len(neiavedeg))) if neiavedeg else 0

Things to note here:

1. Edge weights are not handled; things can become more complicated if the 
edges have weights.
2. You can simply use g.degree() to query the degrees of all the vertices, so 
you don't have to built the deg vector item by item.
3. g.neighbors() accepts a Vertex object as well as a vertex index, so no need 
to use u.index there.
4. Since you query the neighbors of each vertex only once, there is no 
performance gain when you store the neighbor sets in advance (unless you want 
to use them again).

-- 
Tamas




reply via email to

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