MathGroup Archive 2002

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

Search the Archive

RE: creating adjacency matrices

  • To: mathgroup at smc.vnet.net
  • Subject: [mg36576] RE: [mg36561] creating adjacency matrices
  • From: "DrBob" <drbob at bigfoot.com>
  • Date: Fri, 13 Sep 2002 01:13:37 -0400 (EDT)
  • Reply-to: <drbob at bigfoot.com>
  • Sender: owner-wri-mathgroup at wolfram.com

I'll assume you have the information in a matrix like x:

TableForm[x = {{1, A }, {1, B }, {2, B}, {3, D}, {4, D}, {5, C}}]

First find the highest actor number (or use what you've input
elsewhere):

m = Last[Union[x[[All,1]]]]

5

Define the incidence function:

f[x_, a_, b_] /; a == b := 0
f[x_, a_, b_] :=
  If[{} ≠ Intersection[Cases[x, {a, y_} -> y], Cases[x, {b, y_} -> y]],
1, 0]

Here's the incidence matrix:

Array[f[x, #1, #2] &, {m, m}]

{{0, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 1, 0, 0}, {
0, 0, 0, 0, 0}}

Once you have the incidence function, the only reason to store the
incidence matrix is to avoid computing over again the same answers, and
that can be accomplished in other ways.  If you won't have other x
matrices, it's convenient to define f this way:

f[a_, b_] /; a == b := f[a, b] = 0
f[a_, b_] /; a < b := f[a, b] =
    If[{} ≠ Intersection[Cases[x, {a, y_} -> y], Cases[x, {b, y_} ->
y]], 1,  0]
f[a_, b_] := f[b, a]

Array[f, {m, m}]

{{0, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 0, 0, 1, 0}, {0, 0, 1, 0, 0}, {0,
0, 0, 0, 0}}

Whenever you would want the {j,k} element of the adjacency matrix, just
use f[j,k] instead.  Each pair is computed only once.  In this version,
I've taken advantage of the symmetry of the problem, too, to cut the
work in half.

Bobby Treat

-----Original Message-----
From: Moliterno, Thomas [mailto:TMoliter at gsm.uci.edu]
To: mathgroup at smc.vnet.net
Subject: [mg36576] [mg36561] creating adjacency matrices


I need to create an adjacency matrix from my data, which is currently in
the form of a .txt file and is basically a two column incidence list.
For example:

1 A
1 B
2 B
3 C
. .
. .
. .
m n

Where 1 to m represent actors and A to n represent events. My goal is to
have an (m x m) matrix where cell i,j equals 1 if two actors are
incident to the same event (in the sample above, 1 and 2 are both
incident to B) and 0 otherwise (w/ zeros on the diagonal).

I'm new to Mathmatica, and so I'm on the steep part of the learning
curve ... All I've been able to figure out so far is how to get my
incidence list into the program using Import["filename.txt"]. But then
what? How do I convert to the adjacency matrix? I've found the
ToAdjacencyMatrix[] command in DiscreteMath`Combinatorica`, but I can't
seem to get it to work ...

Thanks to any and all in advance.

Tom

**********************************************
Thomas P. Moliterno
Graduate School of Management
University of California, Irvine
tmoliter at uci.edu
**********************************************




  • Prev by Date: Re: Mathematica 4.2: Problem with online help.
  • Next by Date: Re: Coloured lines in graphics but black in print
  • Previous by thread: Re: creating adjacency matrices
  • Next by thread: Re: creating adjacency matrices