gpt4 book ai didi

python - 矩阵和向量的每一列之间的numpy协方差

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:47 28 4
gpt4 key购买 nike

基于 this post ,我可以使用 np.cov((x,y), rowvar=0) 获得两个向量之间的协方差。我有一个矩阵 MxN 和一个向量 Mx1。我想找到矩阵的每一列和给定向量之间的协方差。我知道我可以使用 for 循环来写。我想知道我是否可以以某种方式使用 np.cov() 直接获得结果。

最佳答案

正如 Warren Weckesser 所说,numpy.cov(X, Y) 不适合这项工作,因为它只会将数组加入一个 M x (N+1) 数组并找到巨大的 (N+1) x (N+1) 协方差矩阵。但我们将始终拥有 definition of covariance并且易于使用:

A = np.sqrt(np.arange(12).reshape(3, 4))   # some 3 by 4 array 
b = np.array([[2], [4], [5]]) # some 3 by 1 vector
cov = np.dot(b.T - b.mean(), A - A.mean(axis=0)) / (b.shape[0]-1)

这将返回 A 的每一列与 b 的协方差。

array([[ 2.21895142,  1.53934466,  1.3379221 ,  1.20866607]])

我使用的公式是样本协方差(这也是 numpy.cov 计算的),因此除以 (b.shape[0] - 1)。如果除以 b.shape[0],您会得到未经调整的 population covariance .

为了比较,使用 np.cov 进行相同的计算:

import numpy as np
A = np.sqrt(np.arange(12).reshape(3, 4))
b = np.array([[2], [4], [5]])
np.cov(A, b, rowvar=False)[-1, :-1]

相同的输出,但它需要大约两倍的时间(对于大矩阵,差异会更大)。最后的切片是因为 np.cov 计算了一个 5 x 5 矩阵,其中只有最后一行的前 4 个条目是您想要的。其余的是 A 与其自身或 b 与其自身的协方差。

相关系数

相关系数除以方差的平方根得到。注意前面提到的 -1 调整:numpy.var 默认情况下不会执行此操作,要执行此操作,您需要 ddof=1 参数。

corr = cov / np.sqrt(np.var(b, ddof=1) * np.var(A, axis=0, ddof=1)) 

检查输出是否与低效版本相同

np.corrcoef(A, b, rowvar=False)[-1, :-1]

关于python - 矩阵和向量的每一列之间的numpy协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48105922/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com