Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
Take a look at numpy.ix_ http://www.scipy.org/Numpy_Example_List_With_Doc#head-603de8bdb62d0412798c45fe1db0648d913c8a9c This method creates the index array for you. You only have to specify the coordinates in each dimesion. Bernhard On Oct 29, 8:46 am, Matthieu Brucher [EMAIL PROTECTED] wrote: Little correction, only c[(2,3)] gives me what I expect, not c[[2,3]], which is even stranger. c[(2,3)] is the same as c[2,3] and obviously works as you expected. Well, this is not indicated in the documentation. c[[2,3]] is refered to as 'advanced indexing' in the numpy book. It will return elements 2 and 3 along the first dimension. To get what you want, you need to put it like this: c[[2],[3]] In [118]: c = N.arange(0.,3*4*5).reshape((3,4,5)) In [119]: c[[2],[3]] Out[119]: array([[ 55., 56., 57., 58., 59.]]) This is very strange to say the least, as tuple do not work in the same way. This does not work however using a ndarray holding the indices. In [120]: ind = N.array([[2],[3]]) In [121]: c[ind] --- type 'exceptions.IndexError'Traceback (most recent call last) /media/hda6/home/ck/ipython console in module() type 'exceptions.IndexError': index (3) out of range (0=index=2) in dimension 0 so you have to convert it to a list before: In [122]: c[ind.tolist()] Out[122]: array([[ 55., 56., 57., 58., 59.]]) But if I have the coordinates of the points in an array, I have to reshape it and then convert it into a list. Or convert it into a list and then convert it to a tuple. I know that advanced indexing is useful, but here it is not coherent. tuples and lists should have the same result on the array, or at least it should be documented. So there is not way to get a sub-array based on coordinates in an array ? Matthieu -- French PhD student Website :http://miles.developpez.com/ Blogs :http://matt.eifelle.comandhttp://blog.developpez.com/?blog=92 ___ Numpy-discussion mailing list [EMAIL PROTECTED]://projects.scipy.org/mailman/listinfo/numpy-discussion ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
Matthieu Brucher matthieu.brucher at gmail.com writes: But if I have the coordinates of the points in an array, I have to reshape it and then convert it into a list. Or convert it into a list and then convert it to a tuple. I know that advanced indexing is useful, but here it is not coherent. tuples and lists should have the same result on the array, or at least it should be documented. I can't give you the reasons why that behaviour was chosen. But it's simply wrong that it's not documented. Before answering you I read the corresponding chapter in the numpy book to be sure not to tell you nonsense. So go ahead and do so, too. So there is not way to get a sub-array based on coordinates in an array? It's just a guess, but probably you can't use an ndarray as index because indices like this [[2],[3,4]] aren't valid input for a ndarray. Christian ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
But if I have the coordinates of the points in an array, I have to reshape it and then convert it into a list. Or convert it into a list and then convert it to a tuple. I know that advanced indexing is useful, but here it is not coherent. tuples and lists should have the same result on the array, or at least it should be documented. I can't give you the reasons why that behaviour was chosen. But it's simply wrong that it's not documented. Before answering you I read the corresponding chapter in the numpy book to be sure not to tell you nonsense. So go ahead and do so, too. Thank you for this answer, I suppose we'll have to wait the answer of a numpy guru ;) Matthieu -- French PhD student Website : http://miles.developpez.com/ Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92 ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
On 10/28/07, Matthieu Brucher [EMAIL PROTECTED] wrote: Little correction, only c[(2,3)] gives me what I expect, not c[[2,3]], which is even stranger. c[(2,3)] is the same as c[2,3] and obviously works as you expected. Well, this is not indicated in the documentation. This is true at the Python level and is not related to numpy. x=c[2,3] is equivalent to x=c.__getitem__((2,3)). Note that the index pair is passed as a tuple. On the other hand, a single index is not passed as a tuple, but is instead passed as is. For example: x = c[a] gets passed as x=c.__getitem__(a). If 'a' happens to be '(2,3)' you get the behavior above. So, although lists and arrays can be used for fancy-indexing, tuples cannot be since you can't tell the difference between a tuple of indices and multiple indices inside square brackets. [SNIP] -- . __ . |-\ . . [EMAIL PROTECTED] ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
In this case the constructor tuple(arr) should work just fine. Sorry, I didn't know it could work (shame on me I should have tested). -- French PhD student Website : http://miles.developpez.com/ Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92 ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
[Numpy-discussion] Getting an item in an array with its coordinates given by another array
Hi, I'm trying to get an item in an array when I only have another array giving the position. For instance: c = numpy.arange(0., 3*4*5).reshape((3,4,5)) c***(numpy.array((2,3), dtype=int)) [55, 56, 57, 58, 59] I'm trying to figure what to put between c and ((2,3)). I supposed that the take method would be what I wanted but it is not... The [] operator does not work on array(but it seems to give the expected result with a tuple or a list). Is there a method for this ? Matthieu -- French PhD student Website : http://miles.developpez.com/ Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92 ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
Matthieu Brucher matthieu.brucher at gmail.com writes: Little correction, only c[(2,3)] gives me what I expect, not c[[2,3]], which is even stranger. c[(2,3)] is the same as c[2,3] and obviously works as you expected. c[[2,3]] is refered to as 'advanced indexing' in the numpy book. It will return elements 2 and 3 along the first dimension. To get what you want, you need to put it like this: c[[2],[3]] In [118]: c = N.arange(0.,3*4*5).reshape((3,4,5)) In [119]: c[[2],[3]] Out[119]: array([[ 55., 56., 57., 58., 59.]]) This does not work however using a ndarray holding the indices. In [120]: ind = N.array([[2],[3]]) In [121]: c[ind] --- type 'exceptions.IndexError'Traceback (most recent call last) /media/hda6/home/ck/ipython console in module() type 'exceptions.IndexError': index (3) out of range (0=index=2) in dimension 0 so you have to convert it to a list before: In [122]: c[ind.tolist()] Out[122]: array([[ 55., 56., 57., 58., 59.]]) Christian ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion
Re: [Numpy-discussion] Getting an item in an array with its coordinates given by another array
Little correction, only c[(2,3)] gives me what I expect, not c[[2,3]], which is even stranger. c[(2,3)] is the same as c[2,3] and obviously works as you expected. Well, this is not indicated in the documentation. c[[2,3]] is refered to as 'advanced indexing' in the numpy book. It will return elements 2 and 3 along the first dimension. To get what you want, you need to put it like this: c[[2],[3]] In [118]: c = N.arange(0.,3*4*5).reshape((3,4,5)) In [119]: c[[2],[3]] Out[119]: array([[ 55., 56., 57., 58., 59.]]) This is very strange to say the least, as tuple do not work in the same way. This does not work however using a ndarray holding the indices. In [120]: ind = N.array([[2],[3]]) In [121]: c[ind] --- type 'exceptions.IndexError'Traceback (most recent call last) /media/hda6/home/ck/ipython console in module() type 'exceptions.IndexError': index (3) out of range (0=index=2) in dimension 0 so you have to convert it to a list before: In [122]: c[ind.tolist()] Out[122]: array([[ 55., 56., 57., 58., 59.]]) But if I have the coordinates of the points in an array, I have to reshape it and then convert it into a list. Or convert it into a list and then convert it to a tuple. I know that advanced indexing is useful, but here it is not coherent. tuples and lists should have the same result on the array, or at least it should be documented. So there is not way to get a sub-array based on coordinates in an array ? Matthieu -- French PhD student Website : http://miles.developpez.com/ Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92 ___ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion