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:使用权重
aweight
和 fweight
参数允许我们为协方差估计指定权重。
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
表示频率权重,即它表示观测值重复的次数。