使用Numpy计算相关系数

2 投票
1 回答
3646 浏览
提问于 2025-04-17 05:32

我有一组数值和一个一维的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,)) 把原始数组变成一维的。

撰写回答