MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: tab-delimited file to graph


aitor69gonzalez at gmail.com wrote:
> Hello,
> 
> I have a directed graph "mygraph" in a tab delimited file that looks
> like this:
> v1    v2
> v2    v3
> v3    v1
> v1    v4
> I would like to import this graph into mathematica, so that I can take
> advantage of the -DiscreteMath`Combinatorica`- functions. So far, I was
> only able to import it with Import["mygraph","TSV"] into a list of
> two-item lists. Now, I am stuck there. Can somebody help me to convert
> this list of two-item lists into a matrix or adjacency list of a
> directed graph?
> 
> Thank you in advance,
> 
> Aitor
> 
Hi Aitor,

Building an adjacency matrix from a list of pairs can be achieve with 
the function SparseArray. In the following, I will assume that the 
element of your list are literally named v1, v2, ..., vn. First we 
transform the pairs {vi,vj} into the pairs of numerical indices {i, j}. 
Then we build the replacement rules expected by SparseArray thanks to 
the function Thread. Finally, we build the matrix as a sparse array that 
contains 1 wherever two vertices are adjacent and 0 everywhere else. 
Note that a sparse array is a compact structure, highly efficient in 
terms of memory usage. You may want to see the sparse array as a regular 
dense matrix, however. You can do that by using the Normal function.

lst = {{v1, v2}, {v2, v3}, {v3, v1}, {v1, v4}};
{v1, v2, v3, v4} = Range[4]

--> {1, 2, 3, 4}

lst
--> {{1, 2}, {2, 3}, {3, 1}, {1, 4}}

rls = Thread[lst -> Table[1, {Length[lst]}]]

--> {{1, 2} -> 1, {2, 3} -> 1, {3, 1} -> 1, {1, 4} -> 1}

SparseArray[rls];
MatrixForm[Normal[SparseArray[rls]]]

-->
0   1   0   1

0   0   1   0

1   0   0   0

Best regards,
Jean-Marc


  • Prev by Date: Re: Re: solve and Abs
  • Next by Date: Re: General--Different Results
  • Previous by thread: Re: tab-delimited file to graph
  • Next by thread: Evaluating a Meijer G-function