【问题标题】:Calculating Correlation Coefficient with Numpy用 Numpy 计算相关系数
【发布时间】:2011-12-20 20:12:55
【问题描述】:

我有一个值列表和一个一维 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,)。我错过了什么?

提前致谢。

【问题讨论】:

  • 我找到了一种解决方法,方法是创建一个 numpy 数组并将元素添加到其中而不是附加到列表中,但我仍然觉得一旦转换为 numpy 数组就应该可以使用列表来执行此操作。

标签: python arrays list numpy


【解决方案1】:

我想你可能已经假设reshape 修改了原始数组的值。它没有:

>>> a = np.random.randn(5)
>>> a.shape
(5,)
>>> b = a.reshape(5,1)
>>> b.shape
(5, 1)
>>> a.shape
(5,)

np.asarray 将常规列表视为 1d 数组,但您所说的 1d 原始 numpy 数组实际上是 2d(因为它的形状是 (400,1))。如果您想像使用二维数组一样使用列表,有两种简单的方法:

  • np.asarray(lst).reshape((-1, 1))-1 表示该维度“需要多少”。
  • np.asarray([lst]).T - .T 表示数组转置,从(1,5) 切换到(5,1)。-

您还可以通过 ary.reshape((-1,)) 将原始数组重新整形为 1d。

【讨论】:

  • 是的,我也这么认为。但这就是您如何拥有 (5, ) 形状的原因。它必须默认为1!如果您不能将它与其他原始 numpy 数组一起使用,那么使用该转换功能似乎没有任何意义。
  • @Aladdin (5,) 形状的要点在于它是一个一维数组。 (5,1) 是二维的,(5,1,1) 是三维的。您绝对可以将它与其他 numpy 数组一起使用——只是形状相同的数组,并且列表被认为是一维数组。我在答案中添加了如何使其成为二维数组的描述。
猜你喜欢
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多