indexing of arbitrary axis and arbitrary slice?

Dear all,
Is there some way to index the numpy array by specifying arbitrary axis and arbitrary slice, while not knowing the actual shape of the data? For example, I have a 3-dim data, data.shape = (3,4,5) Is there a way to retrieve data[:,0,:] by using something like np.retrieve_data(data,axis=2,slice=0), by this way you don't have to know the actual shape of the array. for for 4-dim data, np.retrieve_data(data,axis=2,slice=0) will actually be data[:,0,:,:]
thanks in advance,
Chao

On 16 Mar 2013 16:41, "Chao YUE" chaoyuejoy@gmail.com wrote:
Dear all,
Is there some way to index the numpy array by specifying arbitrary axis
and arbitrary slice, while
not knowing the actual shape of the data? For example, I have a 3-dim data, data.shape = (3,4,5) Is there a way to retrieve data[:,0,:] by using something like
np.retrieve_data(data,axis=2,slice=0),
by this way you don't have to know the actual shape of the array. for for 4-dim data, np.retrieve_data(data,axis=2,slice=0) will actually
be data[:,0,:,:]
I don't know of anything quite like that, but it's easy to fake it:
def retrieve_data(a, ax, idx): full_idx = [slice(None)] * a.ndim full_idx[ax] = idx return a[tuple(full_idx)]
Or for the specific case where you do know the axis in advance, you just don't know how many trailing axes there are, use a[:, :, 0, ...] and the ... will expand to represent the appropriate number of :'s.
-n

Hi Nathaniel,
thanks for your reply, it works fine and suffice for my purpose.
cheers,
Chao
On Sat, Mar 16, 2013 at 5:49 PM, Nathaniel Smith njs@pobox.com wrote:
On 16 Mar 2013 16:41, "Chao YUE" chaoyuejoy@gmail.com wrote:
Dear all,
Is there some way to index the numpy array by specifying arbitrary axis
and arbitrary slice, while
not knowing the actual shape of the data? For example, I have a 3-dim data, data.shape = (3,4,5) Is there a way to retrieve data[:,0,:] by using something like
np.retrieve_data(data,axis=2,slice=0),
by this way you don't have to know the actual shape of the array. for for 4-dim data, np.retrieve_data(data,axis=2,slice=0) will actually
be data[:,0,:,:]
I don't know of anything quite like that, but it's easy to fake it:
def retrieve_data(a, ax, idx): full_idx = [slice(None)] * a.ndim full_idx[ax] = idx return a[tuple(full_idx)]
Or for the specific case where you do know the axis in advance, you just don't know how many trailing axes there are, use a[:, :, 0, ...] and the ... will expand to represent the appropriate number of :'s.
-n
NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
participants (2)
-
Chao YUE
-
Nathaniel Smith