首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数值协方差矩阵

数值协方差矩阵
EN

Stack Overflow用户
提问于 2013-02-23 10:05:33
回答 10查看 80.1K关注 0票数 22

假设我有两个长度为25的向量,我想计算它们的协方差矩阵。我试着用numpy.cov做这件事,但总是得到一个2x2的矩阵。

代码语言:javascript
复制
>>> import numpy as np
>>> x=np.random.normal(size=25)
>>> y=np.random.normal(size=25)
>>> np.cov(x,y)
array([[ 0.77568388,  0.15568432],
       [ 0.15568432,  0.73839014]])

使用rowvar标志也无济于事--我得到的结果完全相同。

代码语言:javascript
复制
>>> np.cov(x,y,rowvar=0)
array([[ 0.77568388,  0.15568432],
       [ 0.15568432,  0.73839014]])

如何获得25x25协方差矩阵?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-02-23 10:15:53

你有两个向量,而不是25个。我使用的计算机没有python,所以我无法对其进行测试,但请尝试:

代码语言:javascript
复制
z = zip(x,y)
np.cov(z)

当然..。你真正想要的可能更像是:

代码语言:javascript
复制
n=100 # number of points in each vector
num_vects=25
vals=[]
for _ in range(num_vects):
    vals.append(np.random.normal(size=n))
np.cov(vals)

这取num_vects 1xn向量的协方差(我想/希望)

票数 13
EN

Stack Overflow用户

发布于 2013-02-25 21:55:44

试试这个:

代码语言:javascript
复制
import numpy as np
x=np.random.normal(size=25)
y=np.random.normal(size=25)
z = np.vstack((x, y))
c = np.cov(z.T)
票数 13
EN

Stack Overflow用户

发布于 2019-04-02 17:10:13

样本向量的协方差矩阵

为了澄清关于什么是使用两个N维向量定义的协方差矩阵的小混乱,有两种可能性。

你必须问自己的问题是,你是否考虑过:

  • each向量是一个单变量向量的N个实现/样本(例如,两个三维向量[X1,X2,X3][Y1,Y2,Y3],其中变量X和Y的3个实现respectively)
  • each向量作为N个变量的1个实现(例如,两个三维向量[X1,Y1,Z1][X2,Y2,Z2],其中每个向量有1个变量X,Y和Z的实现)

由于协方差矩阵被直观地定义为基于两个不同变量的方差:

  • 在第一种情况下,你有2个变量,每个变量有N个示例值,所以你最终得到一个2x2的矩阵,其中协方差的计算要归功于每个变量的N个样本
  • 在第二种情况下,你有N个变量,每个变量2个样本,所以你最终得到了一个NxN矩阵

关于实际问题,使用numpy

如果您考虑到每个向量有25个变量(为了简化示例代码,采用了3个变量,而不是25个变量),那么一个向量中的多个变量的一个实现,可以使用rowvar=0

代码语言:javascript
复制
# [X1,Y1,Z1]
X_realization1 = [1,2,3]

# [X2,Y2,Z2]
X_realization2 = [2,1,8]

numpy.cov([X,Y],rowvar=0) # rowvar false, each column is a variable

代码返回,考虑3个变量:

代码语言:javascript
复制
array([[ 0.5, -0.5,  2.5],
       [-0.5,  0.5, -2.5],
       [ 2.5, -2.5, 12.5]])

否则,如果您认为一个变量的一个向量是25个样本,则使用rowvar=1 (的默认参数)

代码语言:javascript
复制
# [X1,X2,X3]
X = [1,2,3]

# [Y1,Y2,Y3]
Y = [2,1,8]

numpy.cov([X,Y],rowvar=1) # rowvar true (default), each row is a variable

代码返回,考虑两个变量:

代码语言:javascript
复制
array([[ 1.        ,  3.        ],
       [ 3.        , 14.33333333]])
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15036205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档