Ric*_*ams 75 python arrays numpy
我是一个numpy的初学者,我试图从一个长的numpy数组中提取一些数据.我需要做的是从我的数组中的一个已定义的位置开始,然后从该位置对每个第n个数据点进行子采样,直到我的数组结束.
基本上如果我有
a = [1,2,3,4,1,2,3,4,1,2,3,4....]
Run Code Online (Sandbox Code Playgroud)
我想对此进行子样本开始,a[1]然后从那里开始每隔四个点采样,以产生类似的东西
b = [2,2,2.....]
Run Code Online (Sandbox Code Playgroud)
beh*_*uri 126
你可以简单地使用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])
Run Code Online (Sandbox Code Playgroud)
这会创建原始数据的视图,因此它是恒定的时间.它还会反映原始数组的变化,并将整个原始数组保存在内存中:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
因此,如果上述任何一个问题出现,您可以明确地制作副本:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
这不是恒定时间,但结果与原始数组无关.该副本在内存中也是连续的,可以使其上的某些操作更快.
| 归档时间: |
|
| 查看次数: |
88776 次 |
| 最近记录: |