igraph-help
[Top][All Lists]
Advanced

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

Re: [igraph] New igraph feature - shrink graph


From: Tom Gregorovic
Subject: Re: [igraph] New igraph feature - shrink graph
Date: Sat, 17 Oct 2009 18:12:06 +0200

On Fri, Jun 5, 2009 at 10:19 AM, Gábor Csárdi <address@hidden> wrote:
> Tom,
>
> I am sorry for the delay.
>
> On Wed, Jun 3, 2009 at 12:17 PM, Tom Gregorovic<address@hidden> wrote:
>> Hi,
>> I plan to implement function for igraph that would shrink graph
>> according to vertex membership to give a global point of view on the
>> network. The same feature is for example in Pajek.
>
> Great!
>
>> I want to consult it before I start.
>> First thing I would need is function that will reindex membership
>> vector to have member IDs continuous starting from 0, to match
>> vertices in shrunken graph. Is this function somewhere in igraph
>> already implemented?
>
> Not as a separate function, but it is really just a couple of lines, e.g.
>
>  for (remaining_vertices=0, i=0; i<no_of_nodes; i++) {
>    if (VECTOR(vertex_recoding)[i]==0) {
>      VECTOR(vertex_recoding)[i]=remaining_vertices+1;
>      remaining_vertices++;
>    } else {
>      VECTOR(vertex_recoding)[i]=0;
>    }
>  }
>
> This keeps the vertices for which vertex_recoding is not zero and
> creates a mapping in place (i.e. in vertex_recoding) for the vertices
> that are kept. Something similar would work for you, probably.
>
>> Vertices with one member ID (-1 as default) set
>> via parameter should be considered not to be shrunken (will get unique
>> ID in reindex function).
>> Second thing is what method to use for constructing shrunken graph.
>> The simple way would be to create empty graph with vertices according
>> to number of unique member IDs and then add edge by edge. One question
>> is if it would add multiple edges.
>
> Probably yes. It is easier to add them than explicitly check for them.
> So, basically, you just create your mapping of vertex ids and then go
> over all edges and rewrite them according to the mapping.
>
>> The function should also return which vertices were shrunken to which
>> vertex (as vector of vector?) and similar thing for edges (in case of
>> merging multiple edges).
>
> A convenient way to do this (I mean, convenient for the user of the
> function) is that it is allowed to supply null pointers, and then
> these are not calculated.
>
> Btw. please implement it against the 0.6-main tree on Launchpad. Thanks.
>
> Tell me if you need more input, best,
> Gabor
>
>> Thank you in advance for your feedback.
>>
>> Regards,
>> Tom Gregorovic
>>

Hi,
I finally made it. Not sure if I haven't done any glitch there,
because I am not so familiar with C.
The first function igraph_membership_reindex is more auxilliary, but
maybe it would be also useful somewhere else.

Regards,
Tom Gregorovic

Attachment: shrink.c
Description: Text Data


reply via email to

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