下面的函数使用切片来一次获取 2 个索引之间的最大值。因此它会获得 0 和 10
之间的最大值,然后是 10 和 12
等等。该函数源自这篇文章的答案post 。有没有一种方法可以用 pandas 函数(例如 pd.Series()
)的形式替换列表推导式。或者如果可能的话将其作为 numpy 函数。
list_ = np.array([9887.89, 9902.99, 9902.99, 9910.23, 9920.79, 9911.34, 9920.01, 9927.51, 9932.3, 9932.33, 9928.87, 9929.22, 9929.22, 9935.24, 9935.24, 9935.26, 9935.26, 9935.68, 9935.68, 9940.5])
indexes = np.array([0,10,12,14])
chunks = np.split(list_, indexes[1:-1])
MAX=([c.max() for c in chunks])
最佳答案
我推荐这个:
MAX = np.maximum.reduceat(list_,indexes[:-1])
输出:
array([9932.33, 9929.22, 9940.5 ])
另一种方法不会提高您的性能,而只是替代答案中的列表理解(事实上,甚至可能会稍微慢一些):
max = np.vectorize(np.max)
MAX = max(chunks)
关于python - 用 pandas 和 numpy Python 替换列表推导式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65946986/