JDoe2
JDoe2

Reputation: 287

Remove row from arbitrary dimension in numpy

I have a function, remrow which takes as input an arbitrary numpy nd array, arr, and an integer, n. My function should remove the last row from arr in the nth dimension. For example, if call my function like so:

remrow(arr,2)

with arr as a 3d array, then my function should return:

arr[:,:,:-1]

Similarly if I call;

remrow(arr,1)

and arr is a 5d array, then my function should return:

arr[:,:-1,:,:,:]

My problem is this; my function must work for all shapes and sizes of arr and all compatible n. How can I do this with numpy array indexing?

Upvotes: 1

Views: 88

Answers (1)

hpaulj
hpaulj

Reputation: 231395

Construct an indexing tuple, consisting of the desired combination of slice(None) and slice(None,-1) objects.

In [75]: arr = np.arange(24).reshape(2,3,4)
In [76]: idx = [slice(None) for _ in arr.shape]
In [77]: idx
Out[77]: [slice(None, None, None), slice(None, None, None), slice(None, None, None)]
In [78]: idx[1]=slice(None,-1)
In [79]: arr[tuple(idx)].shape
Out[79]: (2, 2, 4)
In [80]: idx = [slice(None) for _ in arr.shape]
In [81]: idx[2]=slice(None,-1)
In [82]: arr[tuple(idx)].shape
Out[82]: (2, 3, 3)

Upvotes: 2

Related Questions