如何用Numpy按国籍计算平均身高并解决代码报错问题
问题解决:按国籍统计平均身高并找出最高值
首先修正你加载数据时的两处错误:
np.loadtxt参数拼写错误:将delimeter改为delimiter- NumPy数组索引语法错误:Python中不能使用MATLAB风格的
arr(:,0),需改为arr[:, 0](冒号加逗号的切片语法)
修正后的加载代码:
import numpy as np # 修正拼写错误delimiter arr = np.loadtxt("data/details.csv", delimiter=",") # 修正索引语法 weight = arr[:, 0] height = arr[:, 1] gender = arr[:, 2] blood = arr[:, 3] nationality = arr[:, 4]
接下来解决分组计算平均身高的问题:NumPy的mean方法不支持直接按分组参数计算,可通过以下两种方法实现需求:
方法一:循环遍历每个国籍计算均值
# 获取所有唯一国籍值 unique_nations = np.unique(nationality) nation_means = {} for nation in unique_nations: # 筛选当前国籍的身高数据并计算均值 mask = nationality == nation avg_height = height[mask].mean() nation_means[nation] = avg_height # 找出平均身高最高的国籍 max_nation = max(nation_means, key=nation_means.get) print(f"平均身高最高的国籍是:{max_nation},平均身高:{nation_means[max_nation]:.2f}")
方法二:用NumPy高级函数实现高效计算
unique_nations, indices = np.unique(nationality, return_inverse=True) # 按分组计算均值 avg_heights = np.bincount(indices, weights=height) / np.bincount(indices) # 找出最大值对应的国籍 max_idx = np.argmax(avg_heights) max_nation = unique_nations[max_idx] print(f"平均身高最高的国籍是:{max_nation},平均身高:{avg_heights[max_idx]:.2f}")
内容的提问来源于stack exchange,提问作者user19674687
相关产品推荐
相关产品推荐

