更有效的方法来删除最后N个值fom np.array

时间:2016-04-07 15:02:03

标签: python arrays numpy

我正在使用np.arrays。我试图删除最后n个元素,其中n也可以是1。

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

通常我使用这种方法进行数组切片:

corr=corr[:-n]

但我正在考虑使用np.delete来提高性能:

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

但它不起作用,有没有比阵列切片更好的解决方案? (能够处理n = 0的情况的方法,将是一个优势点)

2 个答案:

答案 0 :(得分:3)

数组是具有shapedtype和数据缓冲区等属性的对象。类似A[:-5]的视图是另一个具有自己的shape等的数组,但具有共享数据缓冲区。它正在查看相同的数据,但只能查看切片。

A[:-5].copy()看起来是一样的,但会有自己的数据缓冲区,来自A的所选元素的副本。

无法更改A的数据缓冲区大小。

np.delete返回一个带有自己数据缓冲区的新数组。它根据形状和删除模式使用各种方法。在所有情况下,它都是副本,并且比切片慢。

答案 1 :(得分:2)

使用corr[0:corr.size-n]。这是更快的方式,因为它只是一个视图。 np.delete是剩余元素的副本。

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