[SciPy-User] indexing question
Paul Hobson
pmhobson at gmail.com
Fri Jan 25 14:55:35 EST 2013
On Thu, Jan 24, 2013 at 2:14 PM, Nick Choly <ncholy at gmail.com> wrote:
> I'm fairly new to this, so apologies in advance.
> Let's say I have a 3-d array A[i,j,k] of shape (Ni,Nj,Nk), and a list of
> labels I[k], where I[k] belongs to 0...Ni-1.
> I want to create a new, 2-d array B[j,k] = A[I[k], j, k].
> I've found one solution to this, which is:
> ind_i = np.tile(I, (1,Nj)).T
> ind_j = np.tile(np.arange(Nj), (1,Nk))
> ind_k = np.tile(np.arange(Nk), (1, Nj)).T
> B = A[ind_i, ind_j, ind_k]
>
> but something seems...not ideal about this. Can someone tell me if
> there's a simpler, better way?
> Thanks,
> Nick
>
You can use a colon to grab all the elements along a dimension, e.g.,
In [48]: A = np.random.random_integers(0, 5, size=(3,4,4))
In [49]: A
Out[49]:
array([[[5, 3, 5, 5],
[2, 4, 0, 5],
[4, 3, 4, 5],
[1, 4, 0, 1]],
[[1, 1, 5, 1],
[5, 5, 4, 2],
[1, 2, 0, 2],
[1, 0, 3, 5]],
[[1, 4, 4, 4],
[0, 4, 3, 4],
[2, 2, 3, 1],
[0, 1, 0, 0]]])
In [51]: A[1, :, :]
Out[51]:
array([[1, 1, 5, 1],
[5, 5, 4, 2],
[1, 2, 0, 2],
[1, 0, 3, 5]])
In [52]: A[1, 0:2, 1:]
Out[52]:
array([[1, 5, 1],
[5, 4, 2]])
Does that help?
-paul
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20130125/1ec06f4d/attachment.html>
More information about the SciPy-User
mailing list