Python中如何在循环里按名称调用NumPy数组的不同统计方法
问题解决方法
报错本质原因
mat.names()无法运行,是因为Python会默认把点号后的names当成固定的属性名去查找,不会自动把循环变量里存储的字符串(比如"mean"、"max")解析成对应的方法名来调用。
适配当前场景的实现逻辑
直接用Python内置的getattr()函数即可,这个函数的作用就是通过字符串形式的名称,访问对象对应的属性或方法,完全匹配你要循环调用不同统计方法的需求。
修改后的可运行代码
import numpy as np A = np.arange(9).reshape(3,3) B = np.array([3,4,6,3,2,7,0,1,7]).reshape(3,3) ################# def calc_stats(mat): for stat_name in ["mean", "max", "min"]: # 三个参数依次是:要操作的数组对象、字符串形式的方法名、拿到方法后加括号执行 print(getattr(mat, stat_name)()) calc_stats(A) calc_stats(B)
实用优化
原代码直接打印数值,多个统计结果混在一起很难区分对应关系,可以在输出时同步带上统计项名称,读结果更方便:
def calc_stats(mat): for stat_name in ["mean", "max", "min"]: stat_val = getattr(mat, stat_name)() print(f"{stat_name}: {stat_val:.2f}")
优化后的输出示例:
mean: 4.00 max: 8.00 min: 0.00 mean: 3.67 max: 7.00 min: 0.00
内容的提问来源于stack exchange,提问作者ray_lv
相关产品推荐
相关产品推荐

