Python中快速查找数组第i个元素前所有元素最大值的方法
高效实现数组转单调递增数组的方法
你的需求本质是计算数组的累积最大值——每个位置的值等于该位置及之前所有元素的最大值,最终得到一个非递减的单调数组。
原代码的性能问题
你当前的循环实现时间复杂度为O(n²):每次迭代都要遍历前i个元素计算最大值,当数组规模很大(比如十万级以上)时,重复的遍历会导致速度急剧下降。
最优解决方案:使用numpy内置的累积最大值函数
numpy提供了np.maximum.accumulate()方法,专门用于高效计算累积最大值,时间复杂度为O(n),完全避免了循环的低效问题。
示例代码:
import numpy as np # 假设x是你的输入数组 x = np.array([1, 3, 2, 5, 4]) y = np.maximum.accumulate(x) # 输出结果:array([1, 3, 3, 5, 5])
这个方法直接生成目标数组,不需要先复制原数组再逐个修改,逻辑更简洁,性能提升非常明显。
性能对比参考
对于一个包含100,000个元素的随机数组:
- 原循环方法:耗时约20秒以上(具体取决于硬件)
np.maximum.accumulate():耗时仅约0.001秒左右
内容的提问来源于stack exchange,提问作者Scott Vinay
相关产品推荐
相关产品推荐

