在python3.6.5和scipy1.1.0中,当我运行Kolmogorov-Smirnov测试来检查均匀分布时,如果我向kstest函数提供行或列向量,则会得到两个相反的结果(从p值的角度来看):
from scipy import stats
import numpy as np
>>> np.random.seed(seed=123)
>>> stats.kstest(np.random.uniform(low=0, high=1, size=(10000, 1)), 'uniform')
KstestResult(statistic=0.9999321616877249, pvalue=0.0)
>>> np.random.seed(seed=123)
>>> stats.kstest(np.random.uniform(low=0, high=1, size=(1, 10000)), 'uniform')
KstestResult(statistic=0.9999321616877249, pvalue=0.00013567662455016283)
你知道为什么会这样吗?
在docstring of ^{} 中提到,当
kstest
的第一个参数是数组时,它应该是一个一维数组。在您的示例中,传递的是二维数组(其中一个维度在每种情况下都微不足道)。结果表明,kstest
中的代码在输入数组是二维的情况下不会执行预期的操作。在简单的解决方法是在将数组传递给
kstest
之前将其展平。可以使用ravel()
方法来实现这一点。例如相关问题 更多 >
编程相关推荐