二维NumPy数组中首元素重复行的均值计算方法
解决NumPy数组中首元素重复行的均值计算问题
针对你提出的需求——对NumPy数组中首元素相同的行,计算第二至最后一列的均值并保留唯一首元素行,下面是具体的实现步骤和代码:
完整代码示例
import numpy as np # 定义你的原始数组 arr = np.array([[1, 2, 3, 4], [2, 2, 3, 4], [1, 4, 5, 6], [3, 2, 3, 4]]) # 获取首列的所有唯一值,确定分组依据 unique_first_elements = np.unique(arr[:, 0]) # 用来存储最终结果的列表 result_rows = [] for elem in unique_first_elements: # 筛选出首元素等于当前值的所有行 filtered_rows = arr[arr[:, 0] == elem] # 计算第二到最后一列的均值,keepdims=True保证结果是二维结构,方便后续拼接 mean_values = np.mean(filtered_rows[:, 1:], axis=0, keepdims=True) # 把首元素和计算好的均值拼接成一行,添加到结果列表 combined_row = np.hstack([[[elem]], mean_values]) result_rows.append(combined_row[0]) # 转换为NumPy数组得到最终结果 final_result = np.array(result_rows) print(final_result)
代码解释
- 提取分组依据:用
np.unique(arr[:, 0])获取首列的所有唯一值,这样我们就知道需要对哪些首元素对应的行进行合并计算。 - 筛选分组行:通过布尔索引
arr[arr[:, 0] == elem]快速筛选出所有首元素等于当前值的行。 - 计算均值:
np.mean(filtered_rows[:, 1:], axis=0, keepdims=True)针对第二到最后一列计算均值,axis=0表示按列计算,keepdims=True确保结果保持二维形状,避免后续拼接时出现维度不匹配的问题。 - 拼接结果行:用
np.hstack将首元素和均值列拼接成完整的一行,收集所有行后转换为NumPy数组,就是你想要的输出。
运行代码后,输出结果为:
[[1. 3. 4. 5.] [2. 2. 3. 4.] [3. 2. 3. 4.]]
如果需要整数类型的结果,可以在最后添加final_result = final_result.astype(int)进行转换。
内容的提问来源于stack exchange,提问作者M. Zidan
相关产品推荐
相关产品推荐

