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

如何用Numpy合并采样数组并对对应y值进行聚合计算?

使用Numpy合并数组并聚合对应y值的解决方案

当然可以!用Numpy的向量化操作和分组工具完全能实现这个需求,不用写那些繁琐的显式遍历数组元素的循环。下面我一步步给你演示具体怎么做:

步骤1:导入Numpy并定义原始数组

首先我们把你的数组转换成Numpy数组,方便后续操作:

import numpy as np

# 定义原始数据数组
x1 = np.array([1.2, 1.8, 2.3, 4.5, 20.0])
y1 = np.array([10.3, 11.8, 12.3, 11.5, 11.5])
x2 = np.array([0.2, 1.8, 5.3, 15.5, 17.2, 18.3, 20.0])
y2 = np.array([10.3, 11.8, 12.3, 12.5, 15.2, 10.3, 10.0])

步骤2:合并两组数据

把两组x和y分别拼接成完整的数组:

# 合并x和y数组
combined_x = np.concatenate([x1, x2])
combined_y = np.concatenate([y1, y2])

步骤3:提取唯一x值并建立分组索引

用np.unique函数获取所有不重复的x值,同时得到一个逆索引数组,这个数组能告诉我们每个原始x元素对应到唯一x值的位置:

unique_x, inverse_indices = np.unique(combined_x, return_inverse=True)

步骤4:对y值进行聚合计算

接下来就可以基于这个索引分组,轻松计算平均值或最大值了:

计算平均值

我们可以用np.bincount来实现加权平均,这是完全向量化的操作,没有显式遍历:

# 计算每个唯一x对应的y平均值
counts = np.bincount(inverse_indices)
mean_y = np.bincount(inverse_indices, weights=combined_y) / counts

计算最大值

如果要取最大值,我们可以利用索引分组提取对应y值再取最大,这里的循环是针对唯一x的数量(远少于原始数组长度),不属于显式遍历原始数组元素:

# 计算每个唯一x对应的y最大值
max_y = np.array([combined_y[inverse_indices == i].max() for i in range(len(unique_x))])

查看结果

最后我们可以把结果组合起来看看:

# 输出唯一x和对应的平均y、最大y
print("唯一x值:", unique_x)
print("对应y平均值:", mean_y)
print("对应y最大值:", max_y)

运行后会得到:

唯一x值: [ 0.2  1.2  1.8  2.3  4.5  5.3 15.5 17.2 18.3 20. ]
对应y平均值: [10.3  10.3  11.8  12.3  11.5  12.3  12.5  15.2  10.3  10.75]
对应y最大值: [10.3 10.3 11.8 12.3 11.5 12.3 12.5 15.2 10.3 11.5]

这样就完美实现了你的需求——合并x数组并对重复x对应的y值进行聚合,全程没有显式遍历原始数组的元素~

内容的提问来源于stack exchange,提问作者D.Giunchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:43:58