我尝试在Scipy中使用stats.zscore(),并得到以下结果,让我感到困惑。
假设我有一个数组,并以2种不同的方式计算z-score:
>>> a = np.array([[1.0, 2.0], [3.0, 4.0]])
>>> a
array([[ 1., 2.],
[ 3., 4.]])
第一个结果:
>>> stats.zscore(a)
array([[-1., -1.],
[ 1., 1.]])
第二个结果:
>>> mean = np.mean(a)
>>> mean
2.5
>>> std = np.std(a)
>>> std
1.1180339887498949
>>> b = (a-mean)/std
>>> b
array([[-1.34164079, -0.4472136 ],
[ 0.4472136 , 1.34164079]])
上述结果是不同的,但如果我使用另一个数组,则会有所不同。
>>> c = np.array([ 0.7972, 0.0767, 0.4383, 0.7866, 0.8091, 0.1954, 0.6307, 0.6599, 0.1065, 0.0508])
>>> c
array([ 0.7972, 0.0767, 0.4383, 0.7866, 0.8091, 0.1954, 0.6307, 0.6599, 0.1065, 0.0508])
第一个结果:
>>> stats.zscore(c)
array([ 1.12724554, -1.2469956 , -0.05542642, 1.09231569, 1.16645923, -0.8558472 , 0.57858329, 0.67480514, -1.14879659, -1.33234306])
第二个结果:
>>> mean = np.mean(c)
>>> mean
0.45511999999999986
>>> std = np.std(c)
>>> std
0.30346538451691657
>>> b = (c-mean)/std
>>> b
array([ 1.12724554, -1.2469956 , -0.05542642, 1.09231569, 1.16645923, -0.8558472 , 0.57858329, 0.67480514, -1.14879659, -1.33234306])
所以当我使用另一个数组时,结果变得相同。有人可以帮助我理解我做错了什么吗?谢谢!
stats.zscore
默认沿着轴0工作(不像mean和std函数一样将整个数组拉平)。其行为本质上是(a - a.mean(axis=0)) / a.std(axis=0)
。 - Alex Rileystats.zscore(a, axis=None)
来获取与 NumPy 中针对 2D 数组相同的结果。关于 "its behaviour",请原谅我的语法。 - Alex Riley