[Numpy-discussion] [SciPy-user] Would like to simplify my 3 where statements

David Grant davidgrant at gmail.com
Thu Jul 20 19:47:03 CDT 2006


On 7/20/06, Michael Sorich <michael.sorich at gmail.com> wrote:
> Can you give an specific example of how this would work? The codes
> really is ugly and it is not clear to me what exactly it does.

ok here's a quick example:

import numpy
n=5
i=3
j=4
A=numpy.random.randint(0,2,(n,n)) #make random graph
A=A-diag(diag(A)) #remove diagonal
A=triu(A)+transpose(triu(A)) #make symmetric

Now say A is the adjacency matrix for a graph and I want to know which
nodes are neighbours of A, but I want to exclude node i from
consideration. So if A is:

array([[0, 1, 0, 1, 0],
       [1, 0, 1, 0, 1],
       [1, 0, 0, 0, 0],
       [0, 0, 1, 0, 1],
       [1, 1, 0, 1, 0]])

the neighbours are array([1]) for i=3, j=4.

One way to do it is to do:

ans=where(A[:,j]==1)[0]
if A[i,j] == 1:
    ans -= 1

which is probably faster than my method. I don't really care so much
about speed though. I'm just trying to figure out different ways of
doing this using numpy.

Dave




More information about the Numpy-discussion mailing list