Python 切片2D数组和跳过索引的有效方法;重复提取小片段

Python 切片2D数组和跳过索引的有效方法;重复提取小片段,python,arrays,numpy,slice,Python,Arrays,Numpy,Slice,我有一个2D numpy数组D,它的尺寸是1000,800。我想从数组中提取长度为20的小段: 假设D[0][:]是[1,2,3,4,5,6,…],我想要长度为3的段,我想要前三个数字1,2,3,然后跳过一些索引,比如60,提取3,跳过60,依此类推 我知道我可以做D[:,start:end:step],但是有没有类似于D[:,start:end:step*:skip*]的东西 理想情况下,我想要的是: D = np.random.random((1000,800)) parts = D[:,0

我有一个2D numpy数组D,它的尺寸是1000,800。我想从数组中提取长度为20的小段:

假设D[0][:]是[1,2,3,4,5,6,…],我想要长度为3的段,我想要前三个数字1,2,3,然后跳过一些索引,比如60,提取3,跳过60,依此类推

我知道我可以做D[:,start:end:step],但是有没有类似于D[:,start:end:step*:skip*]的东西

理想情况下,我想要的是:

D = np.random.random((1000,800))
parts = D[:,0:20:1:skip_n_indices_and_repeat]

我感谢你的时间和回答。如果您有更简单或不同的解决方案,请提出。谢谢。

无需使用任何特殊方法,就可以生成如下所需的索引掩码:

D = np.random.random((1000,800))
step = 3
skip = 60
idx = np.arange(800)
needed_indexes = idx%(skip+step)<step

我猜你的例子太复杂了,因为你可以最小化它,给出一个1D阵列的最小工作示例。这就是Asu_Stread的目的:或者你可以尝试以这样一种方式重塑阵列,将感兴趣的元素放置在一个特定的轴上。例如,假设您得到一个1d数组,您可以将其重塑为:,10以获得10的跨距,然后提取前三列,以便每10个元素获得三个元素。如果跳过是3的倍数,则可以将D重塑为1000,-1,3在本例中,您必须首先将最后两列切掉,如果您想跳过60个值而不计算三个拾取的值,然后将形状重新调整回1000,-1,则可以使用切片[:,::20]或[::21]。
>>> E = D[:,needed_indexes]
>>> E.shape
(1000, 39)