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

Med*_*ata 10 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
Run Code Online (Sandbox Code Playgroud)

......有点像x[0::n]?我试过这个,但当然不行:

for i in np.arange(0,len(x),n):
    x = np.delete(x,i)
Run Code Online (Sandbox Code Playgroud)

Jon*_*nts 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]
Run Code Online (Sandbox Code Playgroud)

  • 实际上,这更好地完成了`np.delete(x,slice(None,None,3))`. (2认同)

Rem*_*y F 5

如果数组的长度是 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]
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,它的运行速度几乎是解决方案的两倍np.delete(老实说,在 1.8 倍到 1.9 倍之间)。

您还可以轻松执行奇特的操作,例如每个 n 个值删除 m 个等。