我正在使用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的情况的方法,将是一个优势点)
答案 0 :(得分:3)
数组是具有shape
,dtype
和数据缓冲区等属性的对象。类似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