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

如何仅用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:30:56