[Numpy-discussion] Newbie indexing question and print order
oliphant.travis at ieee.org
Thu Apr 6 03:40:05 CDT 2006
> Hi all,
> I'm having a bit of trouble getting my head around numpy's indexing
> capabilities. A quick summary of the problem is that I want to
> lookup/index in nD from a second array of rank n+1, such that the last
> (or first, I guess) dimension contains the lookup co-ordinates for the
> value to extract from the first array. Here's a 2D (3,3) example:
> In :print ar
> [[ 0.15 0.75 0.2 ]
> [ 0.82 0.5 0.77]
> [ 0.21 0.91 0.59]]
> In :print inds
> [[[1 1]
> [1 1]
> [2 1]]
> [[2 2]
> [0 0]
> [1 0]]
> [[1 1]
> [0 0]
> [2 1]]]
> then somehow return the array (barring me making any row/column errors):
> In : c = ar.somefancyindexingroutinehere(inds)
You can do this with "fancy-indexing". Obviously it is going to take
some time for people to get used to this idea as none of the responses
yet suggest it.
But the following works.
c = ar[inds[...,0],inds[...,1]]
gives the desired effect.
Thus, your simple description c[x,y] = ar[inds[x,y,0],inds[x,y,1]] is a
text-book description of what fancy-indexing does.
> In :print c
> [[ 0.5 0.5 0.91]
> [ 0.59 0.15 0.82]
> [ 0.5 0.15 0.91]]
> i.e. c[x,y] = a[ inds[x,y,0], inds[x,y,1] ]
> Any suggestions? It looks like it should be relatively simple using
> 'put' or 'take' or 'fetch' or 'sit' or something like that, but I'm not
> getting it.
> While I'm here, can someone help me understand the rationale behind
> 'print' printing row, column (i.e. a[0,1] = 0.75 in the above example
> rather than x, y (=column, row; in which case 0.75 would be in the first
> column and second row), which seems to me to be more intuitive.
> I'm really enjoying getting into numpy - I can see it'll be
> simpler/faster coding than my previous environments, despite me not
> knowing my way at the moment, and that python has better opportunities
> for extensibility. So, many thanks for your great work.
More information about the Numpy-discussion