我是numpy的初学者,我正在尝试从长的numpy数组中提取一些数据。我需要做的是从数组中定义的位置开始,然后从该位置对第n个数据点进行子采样,直到数组结束。
基本上如果我有
a = [1,2,3,4,1,2,3,4,1,2,3,4....] 我想对此进行二次采样a[1],然后从那里采样第四个点,以产生类似
b = [2,2,2.....] 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您可以简单地使用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]) 这将创建原始数据的视图,因此它是恒定时间。它还将反映对原始数组的更改,并将整个原始数组保留在内存中:
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]) 这不是固定的时间,但是结果不依赖于原始数组。副本在内存中也是连续的,这可以使副本上的某些操作更快。