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