在Python 3.6.5和scipy 1.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)你知道为什么会这样吗?
发布于 2018-08-02 03:10:10
在kstest中提到,当kstest的第一个参数是数组时,它应该是一个一维数组。在您的示例中,您传递的是二维数组(其中一个维度在每种情况下都是微不足道的)。结果表明,当输入数组是二维的时,kstest中的代码将不会执行您的期望。
简单的修复方法是在将数组传递给kstest之前先将其扁平化。可以使用ravel()方法来完成这一任务。例如,
In [50]: np.random.seed(seed=123)
In [51]: x = np.random.uniform(low=0, high=1, size=(10000, 1))
In [52]: stats.kstest(x.ravel(), 'uniform')
Out[52]: KstestResult(statistic=0.008002577626569918, pvalue=0.5437230826096209)
In [53]: np.random.seed(seed=123)
In [54]: x = np.random.uniform(low=0, high=1, size=(1, 10000))
In [55]: stats.kstest(x.ravel(), 'uniform')
Out[55]: KstestResult(statistic=0.008002577626569918, pvalue=0.5437230826096209)https://stackoverflow.com/questions/51644710
复制相似问题