如何摆脱python for循环? t通常不是均匀间隔的(仅在简单示例中)。使用熊猫的解决方案也很好。
import numpy as np
n = 100
t = np.arange(n)
y = np.arange(n)
edges = np.array([2., 5.5, 19, 30, 50, 72, 98])
indices = np.searchsorted(t, edges)
maxes = np.zeros(len(edges)-1)
for i in range(len(edges)-1):
maxes[i] = np.max(y[indices[i]:indices[i+1]])
print(maxes)
更新: 我认为reduceat可能会这样做,但我不懂语法。
答案 0 :(得分:3)
reduceat很好地完成了这项工作。我在30分钟前就不知道这个功能了。
maxes = np.maximum.reduceat(y, indices)[:-1]