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

Python 删除数组中的每个第n个元素,python,arrays,numpy,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) 你很接近。。。将整个arange作为要删除的子片传递,而不是尝试依次删除每个元素,例如:

如何删除数组中的每个第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)

你很接近。。。将整个arange作为要删除的子片传递,而不是尝试依次删除每个元素,例如:

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]

如果数组的长度是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.8x到1.9x之间)


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

这实际上比
np.delete(x,slice(None,None,3))
@Jaime非常好的观察-没有想到检查
np.delete
是否使用了本机
slice
对象!虽然使用百万物品阵列(事实上它的速度稍微慢一点),但似乎没有任何速度优势,但知道这一点很好-谢谢。这很奇怪。。。在我的系统中,使用slice:
a=np.random.rand(1e6);%timeit np.delete(a,np.arange(0,1e6,3))-->100个循环,最好3个:每个循环14.5毫秒;%timeit np.delete(a,slice(None,None,3))-->100个循环,每个循环最好3:8.41毫秒
@Jaime使用准确的代码:372/365。。。但偶尔交换——嗯……@Jaime为了科学的利益,我也测试了这个,但测试范围要大得多。我得到的结果是,每圈速度略快,从.251到.267毫秒。