每n个实例在Numpy数组中查找最大值

问题描述 投票:2回答:2

我有一个大文件,每秒都有风速和风向。我已经将每个元素存储到一个numpy数组中。例如,风速为ws =(7、8、8.5、8、9.5)。我想以最大1分钟的风速填充另一个阵列,因此每60个实例需要拉最大一个。我已经试过了:

gust = np.full(len(ws), 0) 
indices = sig.argrelmax(ws)
gust[indices] = ws[indices]

他任意提取最大值并将它们成功地输入到数组中,同时保持与ws数组中相同的索引,但是1)我需要它以60(1-60、61-120)的批数检查最大值。 ..等等)。 2)它将数字转换为整数,我需要浮点数才能保持浮点数。

python arrays numpy max indices
2个回答
4
投票

如果元素数是60的倍数,则可以调整数组的形状,然后计算第二维的最大值:

ws.reshape(-1, 60).max(axis=1)

例如,如果我们使用随机数据,则会得到:

>>> ws = np.random.randn(7*60)
>>> ws.reshape(-1, 60).max(axis=1)
array([2.81337727, 2.30824229, 2.31009178, 2.5588816 , 3.41887582,
       2.21686554, 2.10892784])

如果测量次数不是60的倍数,则可以用零“ pad”(因为风速最小为0):

# padding zeros at the end
ws2 = np.append(ws, (0,) * ((60-len(ws))%60))
ws2.reshape(-1, 60).max(axis=1)

1
投票

如果您想以更直接的方式处理非60的倍数,可以使用reduceat

wind=np.random.normal(size=1000)
res=np.maximum.reduceat(wind, np.r_[:wind.size:60])

np.r_创建索引数组0,60,120 ...

[reduceat在连续索引之间的切片上执行ufunc maximum

因此res的最后一个元素是wind的最后1000%60个元素中的最大值

© www.soinside.com 2019 - 2024. All rights reserved.