循环中如何通过字符串变量调用scipy.stats对应分布的fit方法?
解决scipy.stats分布名称字符串调用问题
你可以通过两种常用方法实现将循环中的字符串名称映射到scipy.stats对应的分布类:
方法一:使用getattr()函数
getattr()可以直接从模块或对象中获取指定名称的属性,刚好适配你的需求:
import scipy.stats dist_names = ['Lognorm','Weibull'] for i in dist_names: # 从scipy.stats模块中获取对应名称的分布类 dist_class = getattr(scipy.stats, i) param = dist_class.fit(data) # 后续可根据需求处理param,比如打印、存储等
这个方法无需额外维护映射关系,直接通过字符串匹配模块内的分布名称,适合快速实现。
方法二:构建分布映射字典
如果需要更清晰的映射逻辑,或是担心字符串拼写错误引发问题,可以提前定义字典,将字符串与对应分布类一一绑定:
import scipy.stats dist_map = { 'Lognorm': scipy.stats.Lognorm, 'Weibull': scipy.stats.Weibull } dist_names = ['Lognorm','Weibull'] for name in dist_names: param = dist_map[name].fit(data)
这种方式更直观,一旦dist_names中出现字典未定义的字符串,会直接抛出KeyError,方便快速排查错误。
注意事项
- Python对大小写敏感,要确保
dist_names里的字符串和scipy.stats中的分布名称完全匹配(比如Lognorm不能写成lognorm)。 - 确认使用的scipy版本包含目标分布类,避免因版本差异导致属性不存在的问题。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

