[Numpy-discussion] Fw: array indices and dictionary

Dinesh B Vadhia dineshbvadhia at hotmail.com
Sun Sep 21 13:51:53 EDT 2008


Ooops, I should have said that this is easy to do with 2 for loops ie.

import numpy
from collections import defaultdict

A = 
[[1 6 1 2 3]
 [4 5 4 7 0]
 [2 0 8 0 2]
 [0 0 0 3 7]
 [0 7 0 3 5]
 [8 0 3 0 6]
 [8 0 0 2 2]
 [3 1 0 4 0]
 [5 0 8 0 0]
 [2 1 0 5 6]]

dict = defaultdict(list)
I = A.shape[0]
J = A.shape[1]
for i in xrange(0, I, 1):
    for j in xrange(0, J, 1):
        if a[i,j] > 0:
            dict[i].append(j)

I want to find a faster/efficient way to do this without using the 2 for loops.  Thanks!

Dinesh



From: Dinesh B Vadhia 
Sent: Sunday, September 21, 2008 10:28 AM
To: numpy-discussion at scipy.org 
Subject: array indices and dictionary


Hi!  Say, I've got a numpy array/matrix of the form:

A = 
[[1 6 1 2 3]
 [4 5 4 7 0]
 [2 0 8 0 2]
 [0 0 0 3 7]
 [0 7 0 3 5]
 [8 0 3 0 6]
 [8 0 0 2 2]
 [3 1 0 4 0]
 [5 0 8 0 0]
 [2 1 0 5 6]]

I want to create a dictionary of row indexes (as the keys) mapped to lists of the column indexes of non-zero numbers in that row ie.

dictionary_non-zeros = {
0: [0 1 2 3 4]
1: [0 1 2 3]
2: [0 2 4]
3: [3 4]
...
9: [0 1 3 4]
}

How can I do this?

This code ...

d = {}
for number, row in enumerate(A):
    d[number] = [value for value in row if value !=0]

... picks up the non-zero values in each row eg.

d = {0: [1, 6, 1, 2, 3], 1: [4, 5, 4, 7], 2: [2, 8, 2], 3: [3, 7], ... 9: [2, 1, 5, 6]}

But, I want to pick up the column index of non-zero elements per row.

Thanks!

Dinesh

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080921/94d561a7/attachment.html>


More information about the NumPy-Discussion mailing list