我有一个大文件,每秒都有风速和风向。我已经将每个元素存储到一个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)它将数字转换为整数,我需要浮点数才能保持浮点数。
如果元素数是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)
如果您想以更直接的方式处理非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个元素中的最大值