NumPy cov()

numpy.cov() 方法根据数据和权重估计协方差矩阵。

示例

import numpy as np

# create an array
array1 = np.array([[0, 3, 7], 
                   [1, 4, 6], 
             	     [2, 5, 8]])

# calculate the covariance of the array covariance = np.cov(array1)
print(covariance) ''' Output: [[12.33333333 8.66666667 10.5 ] [ 8.66666667 6.33333333 7.5 ] [10.5 7.5 9. ]] '''

cov() 语法

numpy.cov() 方法的语法是

numpy.cov(array, y = None, rowvar = True, bias = False, ddof = None, fweights = None, aweights = None, dtype = None)

cov() 参数

numpy.cov() 方法接受以下参数

  • array - 包含所需协方差的数字的数组(可以是 array_like
  • y (可选) - 一组额外的变量和观测值(array_like
  • rowvar (可选) - 如果为 True,则每行代表一个变量;否则,每列代表一个变量
  • bias (可选) - 如果为 True,则对数组进行归一化
  • ddof (可选) - 指定是否保持原始数组的形状(bool
  • fweights (可选) - 整数频率权重;观测向量重复的次数(array of int
  • aweights (可选) - 观测向量权重(array of int
  • dtype (可选) - 结果的数据类型

cov() 返回值

numpy.cov() 方法返回一个协方差矩阵。


协方差

协方差是一种统计度量,用于描述两个随机变量之间的关系。它衡量一个变量的变化与另一个变量的变化之间的关联程度。

正协方差意味着变量倾向于一起增加或减少,而负协方差意味着它们朝着相反的方向移动。

零协方差表示没有线性关系。


示例 1:查找 ndArray 的协方差

import numpy as np

# create arrays
array1 = np.array([[0, 1, 2], 
                    [0, 1, 2]])
                    
array2 = np.array([[0, 1, 2], 
                    [2, 1, 0]])
                    
# calculate the covariance of the arrays covariance1 = np.cov(array1) covariance2 = np.cov(array2)
print(covariance1 , '\n') print(covariance2 )

输出

[[1. 1.]
 [1. 1.]]

[[ 1. -1.]
 [-1.  1.]]

在此,array1 完全相关,array2 也以相反的方向完全相关。


示例 2:指定协方差矩阵的数据类型

dtype 参数可用于控制协方差矩阵的数据类型。

import numpy as np

# create an array
array1 = np.array([[0, 3, 7], 
                   [1, 4, 6], 
                   [2, 5, 8]])

# calculate the covariance of the array covariance1 = np.cov(array1) # calculate the covariance of the array as float16 covariance2 = np.cov(array1, dtype = np.float16)
print(covariance1 ,'\n') print(covariance2)

输出

[[12.33333333  8.66666667 10.5       ]
 [ 8.66666667  6.33333333  7.5       ]
 [10.5         7.5         9.        ]] 

[[12.336  8.664 10.5  ]
 [ 8.664  6.332  7.5  ]
 [10.5    7.5    9.   ]]

注意:使用较低精度的 dtype,例如 float16,可能会导致精度损失。


示例 3:使用可选的 rowvar 参数

如果 rowvar 设置为 True(默认),则每行代表一个变量,列中为观测值。

如果 rowvar 设置为 False,则关系将转置:每列代表一个变量,而行包含观测值。

import numpy as np

# create an array
array1 = np.array([[0, 3, 7], 
                   [1, 4, 6], 
                   [2, 5, 8]])

# calculate the covariance of the array covariance1 = np.cov(array1) # calculate the covariance with columns as variables covariance2 = np.cov(array1, rowvar = False)
print('With rows as variables\n', covariance1 ,'\n') print('With columns as variables\n', covariance2)

输出

With rows as variables
 [[12.33333333  8.66666667 10.5       ]
 [ 8.66666667  6.33333333  7.5       ]
 [10.5         7.5         9.        ]] 

With columns as variables
 [[1.  1.  0.5]
 [1.  1.  0.5]
 [0.5 0.5 1. ]]

示例 4:创建归一化的协方差矩阵

可选参数 bias 指定是否归一化协方差矩阵,参数 ddof 指定自由度增量。

import numpy as np

# create an array
array1 = np.array([[0, 3, 7], 
                   [1, 4, 6], 
                   [2, 5, 8]])

# calculate the covariance of the array covariance1 = np.cov(array1) # normalize the covariance matrix covariance2 = np.cov(array1, bias = True) # normalize the covariance matrix with ddof = 2 covariance3 = np.cov(array1, bias = True, ddof = 2)
print('Unnormalized Covariance Matrix\n', covariance1, '\n') print('Normalized Covariance Matrix\n', covariance2, '\n') print('Normalized Covariance Matrix With ddof = 2\n', covariance3, '\n')

输出

Unnormalized Covariance Matrix
[[12.33333333  8.66666667 10.5       ]
 [ 8.66666667  6.33333333  7.5       ]
 [10.5         7.5         9.        ]] 

Normalized Covariance Matrix
 [[8.22222222 5.77777778 7.        ]
 [5.77777778 4.22222222 5.        ]
 [7.         5.         6.        ]] 

Normalized Covariance Matrix With ddof = 2
[[24.66666667 17.33333333 21.        ]
 [17.33333333 12.66666667 15.        ]
 [21.         15.         18.        ]] 

注意ddof = 0 是默认值,ddof = 1 返回一个未归一化的矩阵。


示例 5:使用权重

aweightfweight 参数允许我们为协方差估计指定权重。

import numpy as np

# create an array
array1 = np.array([[0, 3, 7], 
                   [1, 4, 6], 
                   [2, 5, 8]])

# specify weights
a = np.array([3, 1, 2])
f = np.array([2, 1, 3])

# calculate the covariance of the array covariance1 = np.cov(array1) # calculate the covariance of the array with aweights provided covariance2 = np.cov(array1, aweights = a) # calculate the covariance of the array with fweights provided covariance3 = np.cov(array1, fweights = f) # calculate the covariance of the array with both aweights and fweights covariance4 = np.cov(array1, aweights = a, fweights = f)
print('Unweighted Covariance Matrix\n', covariance1, '\n') print('Covariance Matrix with Observation Vector weight\n', covariance2, '\n') print('Covariance Matrix with frequency weight\n', covariance3, '\n') print('Covariance Matrix with both weights\n', covariance4, '\n')

输出

Unweighted Covariance Matrix
[[12.33333333  8.66666667 10.5       ]
 [ 8.66666667  6.33333333  7.5       ]
 [10.5         7.5         9.        ]] 

Covariance Matrix with Observation Vector weight
 [[16.04545455 11.5        13.77272727]
 [11.5         8.40909091  9.95454545]
 [13.77272727  9.95454545 11.86363636]] 

Covariance Matrix with frequency weight
 [[12.   8.4 10.2]
 [ 8.4  6.   7.2]
 [10.2  7.2  8.7]] 

Covariance Matrix with both weights
 [[13.86956522  9.86956522 11.86956522]
 [ 9.86956522  7.08695652  8.47826087]
 [11.86956522  8.47826087 10.17391304]] 

这里,

  • aweights 表示观测向量权重,即它量化了观测值在相关性中的重要性。
  • fweights 表示频率权重,即它表示观测值重复的次数。

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战