如何让Scipy stats median_test返回对象而非元组?
解决scipy.median_test返回元组而非带标签对象的问题
问题原因
你遇到的差异是因为Scipy版本差异:Scipy 1.7.0及以上版本中,median_test返回MedianTestResult对象(支持.statistic、.median、.pvalue等属性访问);而1.7.0之前的旧版本仅返回无标签元组。
元组元素对应关系(旧版本)
旧版本返回的元组元素顺序固定为:
- 索引0:检验统计量(statistic)
- 索引1:p值(pvalue)
- 索引2:合并样本的中位数(median)
- 索引3:列联表(contingency table)
所以你要获取中位数的话,旧版本可以直接写:
res1 = median_test(HCVs, genpops, nan_policy='omit') print(res1[2]) # 输出中位数
获取带标签对象的两种方法
升级Scipy版本
执行命令升级到最新稳定版:pip install --upgrade scipy升级后即可直接用
.median、.pvalue等属性访问结果,和官方文档一致。手动封装元组为命名元组(不升级版本的兼容方案)
如果无法升级版本,可以用collections.namedtuple把元组转换成类似对象的结构,模拟属性访问:from collections import namedtuple from scipy.stats import median_test # 定义命名元组,匹配旧版本元组的元素顺序 MedianTestResult = namedtuple('MedianTestResult', ['statistic', 'pvalue', 'median', 'table']) res1 = MedianTestResult(*median_test(HCVs, genpops, nan_policy='omit')) print(res1.median) # 现在可以用属性访问中位数
内容的提问来源于stack exchange,提问作者Yoshi Bird
相关产品推荐
相关产品推荐

