how to do the mapping btw numpy arrayvalues and matrix columns

Cameron Walsh cameron.walsh at gmail.com
Sat Nov 3 02:32:09 EDT 2007


devnew at gmail.com wrote:
> hi
> i am looking for some info about mapping  btw values in an array and
> corresponding columns of a matrix
> 
> i have an numpy array=[11.0,33.0,22.0,55.0,44.0]
> and a numpy matrix object=
>                    matrix(([1.3,2.5,3.2,6.7,3.1],
>                               [9.7,5.6,4.8,2.5,2.2],
>                               [5.1,3.7,9.6,3.1,6.7],
>                               [5.6,3.3,1.5,2.4,8.5]))
> the first value of array(ie 11.0) is related to the first column of
> matrix  and so on..
> i wish to create a mapping btw each val of array and corresponding col
> of matrix..and then i want to sort the array and retrieve the matrix
> columns for some values of sorted array..can anyone advise how to go
> about it..
> 
> dn
> 

If this were a less helpful mailing list I'd say something like "there 
is also a numpy mailing list and you've overwritten the object class."

Anyway, the following would work, but it's not going to be fast for 
millions of elements:

from numpy import matrix, asarray
obj = matrix(([1.3,2.5,3.2,6.7,3.1],
               [9.7,5.6,4.8,2.5,2.2],
               [5.1,3.7,9.6,3.1,6.7],
               [5.6,3.3,1.5,2.4,8.5]))
ar = asarray(obj)
val_to_col_list = []
for row in ar:
     for ind,val in enumerate(row):
         val_to_col_list.append((val,ind))
val_to_col_list.sort()

If instead you require a map, such that each value maps to a list of the 
columns it appears in, you could try the following:

val_col_map = {}
for row in ar:
     for col,val in enumerate(row):
         tmplist=val_col_map.get(val,[])
         tmplist.append(col)
         val_col_map[val]=tmplist
val_keys = val_col_map.keys()
val_keys.sort()

val_keys is now a sorted list of unique values from your original 
matrix.  Use these values as keys for val_col_map.

Eww... but it works.  You'll want to be really careful with floating 
point numbers as keys, see http://docs.python.org/tut/node16.html for 
more details.

Best of luck,

Cameron.



More information about the Python-list mailing list