Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

More efficient way to remove last N values fom np.array

I am working with np.arrays. I am trying to remove the last n elements, where n can be also 1.

n=5
corr=np.full(10,10)

Usually I use this approach with array slicing:

corr=corr[:-n]

But I was thinking of using np.delete to increase the performance:

np.delete(corr,range(-n,0))

But it doesn't work, is there any better solution compare with array slicing? (method able to deal also with case in which n=0, would be a point of advantage)

like image 870
G M Avatar asked Nov 17 '25 11:11

G M


2 Answers

An array is an object with attributes like shape, dtype, and a data buffer. A view like A[:-5] is another array with its own shape, etc, but with a shared data buffer. It's looking at the same data, but only sees a slice.

A[:-5].copy() will appear to be the same, but will have its own data buffer, a copy of selected elements from A.

There's no way of changing the size of the data buffer of A.

np.delete returns a new array with its own data buffer. It uses various methods depending on the shape and delete pattern. It all cases it is a copy, and slower than slicing.

like image 55
hpaulj Avatar answered Nov 20 '25 00:11

hpaulj


Use corr[0:corr.size-n]. this is the faster way since it is only a view. np.delete is a copy of the remainding elements.

In [9]: %timeit corr[0:corr.size-5]
1000000 loops, best of 3: 1.45 µs per loop

In [10]: %timeit np.delete(corr,range(corr.size-5,corr.size)) 
10000 loops, best of 3: 145 µs per loop
like image 37
B. M. Avatar answered Nov 20 '25 01:11

B. M.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!