python中矩阵的协方差

时间:2018-09-20 18:18:51

标签: python covariance covariance-matrix

我想找到一个10304 * 280矩阵的协方差(即280个变量,每个都有10304个主题),我正在使用下面的numpy函数来找到它。

cov = numpy.cov(matrix)

结果是我期望208 * 280矩阵,但返回10304 * 10304矩阵。

2 个答案:

答案 0 :(得分:0)

这是numpy.cov(m, y=None..)文档所说的

  

m:array_like一个包含多个变量的一维或二维数组,并且   观察。 m的每一行代表一个变量每列   对所有这些变量的一次观察 ...

因此,如果您的矩阵包含280个变量,每个变量具有10304个样本,则假定为280 * 10304矩阵,而不是10304 * 280个。简单的解决方案将与其他人建议的一样。

swap_matrix = numpy.swapaxis(matrix)
cov = numpy.cov(swap_matrix)

答案 1 :(得分:0)

如上一个答案中所建议,您可以更改内存布局。 在2d中执行此操作的一种简单方法是简单地转置矩阵:

import numpy as np
r = np.random.rand(100, 10)
np.cov(r).shape # is (100,100)
np.cov(r.T).shape # is (10,10)

但是您也可以指定rowvar标志。阅读相关内容here

import numpy as np
r = np.random.rand(100, 10)
np.cov(r).shape # is (100,100)
np.cov(r, rowvar=False).shape # is (10,10)

我认为,特别是对于大型矩阵,由于避免了轴的交换/换位,因此它的性能可能更高。

更新:

我考虑了一下,想知道算法实际上是否根据rowvar == Truerowvar == False而有所不同。好吧,事实证明,如果您更改rowvar标志,numpy只会简单地转置数组本身:P。

here

因此,就性能而言,两个版本之间没有任何变化。