用Matlab做计算的时候发现有corr2cov函数,不知道和python的相关性函数有没有什么不同,数学基础都忘光了,也不想交叉对比源代码,直接重新用python写一遍
import numpy as np
def corr2cov(ExpSigma,ExpCorrC):
'''
Argument checking
ExpSigma [1 by N] standard deviations
ExpCorrC [N by N] correlation coefficients
N [scalar] number of processes
'''
N=ExpSigma.shape[0]
if ExpCorrC.shape[0]!=N or ExpCorrC.shape[1]!=N:
raise ValueError('corr2cov:mismatchSigmaCorrC')
return ExpCorrC*np.dot(ExpSigma.reshape(1,-1).T,ExpSigma.reshape(1,-1))
Matlab多了几步判断输入参数的代码,相信没多少人用这个函数只输入一个Sigma,所以我偷个小懒
以下是根据官网实例的测试代码:
ExpSigma = np.array([0.5, 2.0])
ExpCorrC = np.array([1.0, -0.5,
-0.5, 1.0])
ExpCorrC=ExpCorrC.reshape(2,2)
print (corr2cov(ExpSigma=ExpSigma,ExpCorrC=ExpCorrC))
结果如下:
[[ 0.25 -0.5 ]
[-0.5 4. ]]
其实核心代码就一行,做矩阵乘法