我有一个(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]]