You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效获取Numpy数组中x唯一值对应的y最大值?

高效处理超大数组:去重x并保留对应y的最大值

针对超大数组的高效处理需求,推荐使用NumPy的向量操作实现,全程避免Python循环,性能拉满。以下是具体实现步骤:

实现代码

import numpy as np

# 示例输入数组(实际使用时直接替换为你的超大数组)
x = np.array([0, 16, 24, 28, 30, 31, 32, 32, 33, 33, 33, 33])
y = np.array([1050, 110, 104, 107, 820, 101, 102, 649, 103, 101, 1020, 100])

# 1. 对x排序,同时同步y的顺序(确保相同x值聚在一起)
sorted_indices = np.argsort(x)
sorted_x = x[sorted_indices]
sorted_y = y[sorted_indices]

# 2. 找到x值发生变化的位置,作为分组边界
split_positions = np.where(sorted_x[1:] != sorted_x[:-1])[0] + 1
split_positions = np.insert(split_positions, 0, 0)

# 3. 按分组计算每组y的最大值
max_y = np.maximum.reduceat(sorted_y, split_positions)
unique_x = sorted_x[split_positions]

# 输出结果
print("去重后的x数组:", unique_x)
print("对应y的最大值数组:", max_y)

为什么高效?

  • 全程使用NumPy内置的C级向量操作,没有Python层面的循环,处理超大数组时性能远高于纯Python实现
  • 核心排序操作np.argsort是高度优化的算法,时间复杂度为O(n log n),是此类分组问题的最优复杂度之一
  • 如果你的x数组本身已经是有序的,可以跳过排序步骤,直接计算分组边界,时间复杂度降到O(n)

结果验证

运行上述代码后,输出完全符合预期:

去重后的x数组: [ 0 16 24 28 30 31 32 33]
对应y的最大值数组: [1050  110  104  107  820  101  649 1020]

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:50:19