对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])
这不是一个固定的时间,但是结果并不依赖于原始数组。 内存中的副本也是连续的,这可以使其上的一些操作更快。