numpy矢量化重采样,类似pandas DataFrame重采样



我有一个(4, 2000)numpy数组,希望每5个元素(如max、min、left、right(对每列(N=4)重新采样,使其形状为(4400(。

我可以使用.resample('5Min').agg(~)来处理Pandas.DataFrame,也可以使用numpy数组和类似result = [max(input[i:i+5]) for i in range(0, len(input), 5)]的循环。然而,使用大型输入数组需要花费大量时间,因为它没有矢量化。有什么方法可以用np数组进行矢量化计算吗?

下面是另一种在后台使用numpy步幅的方法(a是您的数组(:

from skimage.util import view_as_blocks
a = view_as_blocks(a, (4,5))

现在,您可以对所需的参数使用方法/切片:

#max
a.max(-1)[0].T
#min
a.min(-1)[0].T
#left
a[...,0][0].T
#right
a[...,-1][0].T

示例:

a
#[[ 0  1  2  3  4  5  6  7  8  9]
# [10 11 12 13 14 15 16 17 18 19]
# [20 21 22 23 24 25 26 27 28 29]
# [30 31 32 33 34 35 36 37 38 39]]
output for max
#[[ 4  9]
# [14 19]
# [24 29]
# [34 39]]

最新更新