[Numpy-discussion] indexing problem
Ernest Adrogué
eadrogue@gmx....
Tue Aug 18 11:22:28 CDT 2009
18/08/09 @ 07:33 (-0700), thus spake Robert Kern:
> 2009/8/18 Ernest Adrogué <eadrogue@gmx.net>:
> > Hi,
> >
> > Suppose I have a 3-dimansional array, where one dimension
> > is time. I'm not particularly interested in selecting specific
> > moments in time, so most of the time I won't be indexing this
> > dimension.
> >
> > Intuitively, one would make time the third dimension, but if
> > you do that you have to specifiy the time in every index, which
> > is annoying, because then all indices must start with an empty
> > slice, e.g.,
> >
> > a[:,1]
> > a[:,:,3]
> > a[:,0,1]
> >
> > etc. On the other hand, the arrays resulting from indexing have
> > all elements sorted by time, which is a good thing.
> >
> > Then, if I change it and make time the first dimension, it's
> > handy because I can omit time in indices, BUT then the sub-arrays
> > produced by indexing are not sorted by time!
>
> I do not know what you mean by "not sorted by time". You can keep the
> sub-arrays sorted however you like regardless of the index used for
> time. Can you show us an example of the problem you are seeing?
Sorry for not explaining myself clearly enough.
I'm using a masked arrays, and I call the compressed() method on
the sub-arrays resulting from indexing, which gives a 1-d array. Is
this 1-d array that isn't sorted the way I'd like.
I'll try to explain this with an example. Here is a 3-d array
that represents a 2-d array in differents moments in time (for
ilustration purposes all elements in the 2-d array increase by
one at each time point:
In [35]: x=np.zeros((3,2,2))
In [36]: x[0]=1
In [37]: x[1]=2
In [38]: x[2]=3
In [39]: x
Out[39]:
array([[[ 1., 1.],
[ 1., 1.]],
[[ 2., 2.],
[ 2., 2.]],
[[ 3., 3.],
[ 3., 3.]]])
Then if I take the elements [:,0] and flatten the resulting
array, we can see that the resulting array has its elements sorted
by time:
In [40]: x[:,0].flatten()
Out[40]: array([ 1., 1., 2., 2., 3., 3.])
But then I thought that it would be nice to arrange the data
differently, so that the dimension that represents time can be
omitted in the index.
Therefore, I re-arrange the data in this way:
In [41]: x=np.zeros((2,2,3))
In [42]: x[:,:,0]=1
In [43]: x[:,:,1]=2
In [44]: x[:,:,2]=3
In [46]: x
Out[46]:
array([[[ 1., 2., 3.],
[ 1., 2., 3.]],
[[ 1., 2., 3.],
[ 1., 2., 3.]]])
But then, the flattened arrays I get are no longer in
time-ascending order:
In [45]: x[0].flatten()
Out[45]: array([ 1., 2., 3., 1., 2., 3.])
It's a bit difficult to explain, but I hope it's more clear now!
Ernest
More information about the NumPy-Discussion
mailing list