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 3dim 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 4dim data, np.retrieve_data(data,axis=2,slice=0) will actually be data[:,0,:,:] thanks in advance, Chao  *********************************************************************************** Chao YUE Laboratoire des Sciences du Climat et de l'Environnement (LSCEIPSL) UMR 1572 CEACNRSUVSQ Batiment 712  Pe 119 91191 GIF Sur YVETTE Cedex Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 ************************************************************************************
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 3dim 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 4dim 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 3dim 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 4dim 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
_______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
 *********************************************************************************** Chao YUE Laboratoire des Sciences du Climat et de l'Environnement (LSCEIPSL) UMR 1572 CEACNRSUVSQ Batiment 712  Pe 119 91191 GIF Sur YVETTE Cedex Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 ************************************************************************************
participants (2)

Chao YUE

Nathaniel Smith