对numpy数组中的每个第n个条目进行子采样

我是一个numpy初学者,我试图从一个长长的numpy数组中提取一些数据。 我需要做的是从我的数组中定义的位置开始,然后从该位置对每个第n个数据点进行子采样,直到数组的末尾。

基本上如果我有

a = [1,2,3,4,1,2,3,4,1,2,3,4....] 

我想对这个子样本从a[1] ,然后从那里对每个第四个点进行采样,得到类似的结果

 b = [2,2,2.....] 

你可以使用numpy的切片 ,只需start:stop:step

 >>> xs array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]) >>> xs[1::4] array([2, 2, 2]) 

这创build了一个原始数据的视图 ,所以它是不变的时间 。 它也会反映原始数组的变化,并将整个原始数组保存在内存中:

 >>> a array([1, 2, 3, 4, 5]) >>> b = a[::2] # O(1), constant time >>> b[:] = 0 # modifying the view changes original array >>> a # original array is modified array([0, 2, 0, 4, 0]) 

所以如果上述任何一种情况都是问题的话,你可以明确地做一个副本:

 >>> a array([1, 2, 3, 4, 5]) >>> b = a[::2].copy() # explicit copy, O(n) >>> b[:] = 0 # modifying the copy >>> a # original is intact array([1, 2, 3, 4, 5]) 

这不是一个固定的时间,但是结果并不依赖于原始数组。 内存中的副本也是连续的,这可以使其上的一些操作更快。