2024-03-28 21:25:44 发布
网友
假设我有一个1d数组,我想要的是用一个移动窗口进行采样,并在窗口内用第一个元素除以每个元素。在
例如,如果我有[2, 5, 8, 9, 6],窗口大小为3,则结果将是
[2, 5, 8, 9, 6]
[[1, 2.5, 4], [1, 1.6, 1.8], [1, 1.125, 0.75]].
我现在做的基本上是一个for循环
等等
当数组很大的时候,速度很慢,我想知道有没有更好的方法?我想没有办法绕过O(n^2)的复杂性,但也许numpy有一些我不知道的优化。在
下面是一个使用^{}-
N = 3 # Window size nrows = a.size-N+1 a2D = a[np.arange(nrows)[:,None] + np.arange(N)] out = a2D/a[:nrows,None].astype(float)
我们还可以使用^{}来更有效地提取滑动窗口,如-
样本运行-
In [73]: a Out[73]: array([4, 9, 3, 6, 5, 7, 2]) In [74]: N = 3 ...: nrows = a.size-N+1 ...: a2D = a[np.arange(nrows)[:,None] + np.arange(N)] ...: out = a2D/a[:nrows,None].astype(float) ...: In [75]: out Out[75]: array([[ 1. , 2.25 , 0.75 ], [ 1. , 0.33333333, 0.66666667], [ 1. , 2. , 1.66666667], [ 1. , 0.83333333, 1.16666667], [ 1. , 1.4 , 0.4 ]])
下面是一个使用^{} -
我们还可以使用^{} 来更有效地提取滑动窗口,如-
^{pr2}$样本运行-
相关问题 更多 >
编程相关推荐