Python删除数组中的每个第n个元素

时间:2014-02-20 23:54:01

标签: python arrays numpy

如何删除数组中的每个第n个元素?

import numpy as np

x = np.array([0,10,27,35,44,32,56,35,87,22,47,17])
n = 3  # remove every 3rd element

...类似x[0::n]的反面?我试过这个,但当然不行:

for i in np.arange(0,len(x),n):
    x = np.delete(x,i)

2 个答案:

答案 0 :(得分:10)

你已经关闭了...将整个范围作为子片段传递给删除而不是试图依次删除每个元素,例如:

import numpy as np

x = np.array([0,10,27,35,44,32,56,35,87,22,47,17])
x = np.delete(x, np.arange(0, x.size, 3))
# [10 27 44 32 35 87 47 17]

答案 1 :(得分:0)

如果数组的长度是n的倍数,我只是添加了另一种方法:

import numpy as np

x = np.array([0,10,27,35,44,32,56,35,87,22,47,17])
x = x.reshape(-1,3)[:,1:].flatten()
# [10 27 44 32 35 87 47 17]

在我的计算机上,它的运行速度几乎比使用np.delete的解决方案快两倍(应该在1.8倍至1.9倍之间)。

您还可以轻松地执行一些高级操作,例如m个删除(每个n个值)等。