使用Numpy计算相关系数
我有一组数值和一个一维的numpy数组,我想用 numpy.corrcoef(x,y,rowvar=0)
来计算相关系数。但是我遇到了一个错误:
Traceback (most recent call last):
File "testLearner.py", line 25, in <module>
corr = np.corrcoef(valuesToCompare,queryOutput,rowvar=0)
File "/usr/local/lib/python2.6/site-packages/numpy/lib/function_base.py", line 2003, in corrcoef
c = cov(x, y, rowvar, bias, ddof)
File "/usr/local/lib/python2.6/site-packages/numpy/lib/function_base.py", line 1935, in cov
X = concatenate((X,y), axis)
ValueError: array dimensions must agree except for d_0
我打印了我的numpy数组的形状,结果是 (400,1)
。当我用 numpy.asarray(y)
把我的列表转换成数组时,得到的形状是(400,)
!
我觉得这就是问题所在。我尝试用 array.reshape
把它变成 (400,1)
,然后打印形状,结果还是 (400,)
。我到底漏掉了什么呢?
提前谢谢你。
1 个回答
1
我觉得你可能以为 reshape
会改变原始数组的值,但其实并不会。
>>> a = np.random.randn(5)
>>> a.shape
(5,)
>>> b = a.reshape(5,1)
>>> b.shape
(5, 1)
>>> a.shape
(5,)
np.asarray
会把普通列表当作一维数组来处理,但你说的原始numpy数组其实是二维的,因为它的形状是 (400,1)
。如果你想把你的列表当作二维数组使用,有两种简单的方法:
np.asarray(lst).reshape((-1, 1))
– 这里的-1
表示“这一维需要多少就多少”。np.asarray([lst]).T
–.T
是数组转置的意思,它会把形状从(1,5)
变成(5,1)
。
你也可以通过 ary.reshape((-1,))
把原始数组变成一维的。