如何仅用Numpy按y值分组计算坐标数组的x分量平均值?
仅用Numpy实现按y值分组求x的平均值
给定Numpy数组:
import numpy as np A = np.array([[0.33703753, 3.], [0.90115394, 5.], [0.91172016, 5.], [0.93230994, 3.], [0.08084283, 3.], [0.71531777, 2.], [0.07880787, 3.], [0.03501083, 4.], [0.69253184, 4.], [0.62214452, 3.], [0.26953094, 1.], [0.4617873 , 3.], [0.6495549 , 0.], [0.84531478, 4.], [0.08493308, 5.]])
目标是按每个y值分组,计算对应x的平均值,得到如下结果:
array([[0.6495549 , 0. ], [0.26953094, 1. ], [0.71531777, 2. ], [0.41882167, 3. ], [0.52428582, 4. ], [0.63260239, 5. ]])
无需依赖Pandas,仅用Numpy即可完成,提供两种实现方式:
方法一:通用分组求平均(适用于任意y值类型)
# 提取所有y值并获取排序后的唯一y值 y_vals = A[:, 1] unique_y = np.sort(np.unique(y_vals)) # 对每个唯一y值,筛选对应的x并计算平均值 avg_x = np.array([A[A[:, 1] == y, 0].mean() for y in unique_y]) # 组合成目标数组 result = np.column_stack((avg_x, unique_y)) print(result)
方法二:高效整数分组(适用于y为整数的场景)
由于示例中y值为0-5的整数,可使用np.bincount提升效率:
# 将y值转为整数类型 y_int = y_vals.astype(int) # 计算每个y对应的x总和与元素个数 sum_x = np.bincount(y_int, weights=A[:, 0]) count_x = np.bincount(y_int) # 计算平均值并组合结果 avg_x = sum_x / count_x result = np.column_stack((avg_x, np.arange(len(avg_x)))) print(result)
两种方法都能得到符合要求的结果,方法二在y为整数时性能更优。
内容的提问来源于stack exchange,提问作者CDJB
相关产品推荐
相关产品推荐

