使用NumPy计算列表均值时触发AttributeError问题求助
错误原因分析:AttributeError: 'list' object has no attribute 'mean'
问题核心
- 报错代码中,
family_name(3个元素)与family_age(4个元素)长度不匹配,且创建numpy数组时指定了dtype=object。这种情况下numpy无法将两组数据转换成统一结构的数值型二维数组,只能把原始的Python列表作为独立对象存入数组。 - 执行
family_name_age[1]取出的是原生Python列表,而Python列表没有mean()方法,因此触发报错。
报错代码:
import numpy as np family_name = ['Homer','Marge','Maggie'] family_age = [39,36,2,8] family_name_age = np.array([family_name, family_age], dtype=object) avg_family_age = family_name_age[1].mean() print('Average age: {:.2f}'.format(avg_family_age))
正常代码能运行的原因
- 正常代码里的
family_height_cm和family_weight_kg长度均为3,numpy可以直接将它们转换为形状为(2,3)的二维数值型ndarray。 - 此时
family_bmi_data[0]取出的是numpy一维数组,自带mean()方法,因此能正常计算均值。
正常代码:
family_height_cm = [183,172,82] family_weight_kg = [109,60,11] family_bmi_data = np.array([family_height_cm,family_weight_kg]) avg_fam_height = family_bmi_data[0].mean() print('Average height: {:.2f}'.format(avg_fam_height))
通俗理论解释
numpy数组本质是规整的结构化容器,要求内部每一行的元素数量必须一致,这样才能对所有元素进行统一的数值运算。如果输入的各行长度不一样,numpy就无法构建这种规整结构,只能把每个原始列表当作“独立个体”存入数组,此时取出的元素还是原来的Python列表,不具备numpy数组的方法(比如mean())。
内容的提问来源于stack exchange,提问作者Josh_BI_UK
相关产品推荐
相关产品推荐

