【问题标题】:Covariance of Matrix in pythonpython中矩阵的协方差
【发布时间】:2018-09-20 18:18:50
【问题描述】:

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

cov = numpy.cov(matrix)

我预计结果为 208*280 矩阵,但它返回 10304*10304 矩阵。

【问题讨论】:

  • 先换轴试试? np.swapaxis()
  • 在 numpy 文档中了解它。您要么想在np.cov 中指定轴(不确定是否可以这样做,但请检查),或者您想在计算协方差之前交换轴。可能您的问题是在 matrix 的错误轴上计算协方差
  • 我认为您看对了,但是如何在 np.cov 中指定轴?

标签: python covariance covariance-matrix


【解决方案1】:

如上一个答案中所建议的,您可以更改内存布局。 在 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

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

【讨论】:

    【解决方案2】:

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

    m : array_like 包含多个变量和的一维或二维数组 观察。 m的每一行代表一个变量每列a 所有这些变量的单一观察...

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

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

    【讨论】:

    • 交换轴的方法是swapaxes(matrix,axis,axis)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2012-12-09
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    相关资源
    最近更新 更多