我正在使用scipy库来计算t-tests,我试图理解为什么单个函数调用会有多个返回类型。它抓住了我,因为在不同的环境中,它会返回不同的对象。
例如,我在当地得到:
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
stats.ttest_ind(rvs1,rvs2)
(0.26833823296239279, 0.78849443369564776)
stats.ttest_ind(rvs1,rvs2, equal_var = False)
(0.26833823296239279, 0.78849452749500748)
这是他们网站上的例子。但是,当它在虚拟机中的CircleCI(持续集成服务)上运行时,我得到:
rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
stats.ttest_ind(rvs1,rvs2)
(array(-1.603223040889008), 0.10920183417176929)
stats.ttest_ind(rvs1,rvs2, equal_var = False)
(array(-1.603223040889008), 0.10920185489799822)
元组的第一个元素现在是一个数组!
为什么这些不同的返回类型看起来几乎可以互换?它是为了向后兼容(虽然服务器和本地运行0.14.0)?环境怎么会有这种影响?
我最终通过运行来解决它:
np.array(stats.ttest_ind(rvs1,rvs2))
将其转换为包含两个元素的单个数组。
尽管我对这个问题有了更好的解决方案感兴趣,但我想深入了解为什么单一函数有不同的返回类型以及它为什么这样设计?
答案 0 :(得分:0)
为了始终确保我有一个一致的输出,我把它包裹在一个numpy数组并展平它:
np.array(stats.ttest_ind(rvs1.values, rvs2.values)).flatten()
将返回:
[0.26833823296239279, 0.78849443369564776]
无论版本