[英]how to use pandas to create correlation matrix of multivariate normal distribution?
在R中,我們可以這樣創建相關矩陣:
makecov <- function(rho,n) {
m <- matrix(nrow=n,ncol=n)
m <- ifelse(row(m)==col(m),1,rho)
return(m)
}
我們知道相關性,結果將是:
makecov(0.2,3)
# [,1] [,2] [,3]
#[1,] 1.0 0.2 0.2
#[2,] 0.2 1.0 0.2
#[3,] 0.2 0.2 1.0
但是在大熊貓中,我們如何有效地創建相同的矩陣? 這是我的解決方案:
def makecov(rho,n):
m=[rho/2]*n*n
m=np.array(m).reshape([n,n])
return m+m.T-np.diag([rho]*n)+np.diag([1]*n)
結果將是:
In [21]:makecov(0.2,3)
Out[21]:
array([[ 1. , 0.2, 0.2],
[ 0.2, 1. , 0.2],
[ 0.2, 0.2, 1. ]])
還有一些更優雅的方法可以對付大熊貓嗎?
我建議您改用numpy的協方差矩陣方法: http : //docs.scipy.org/doc/numpy/reference/generation/numpy.cov.html
根據我的經驗,熊貓最好用於數據清理之類的東西。 我通常讓numpy做繁重的統計工作。
看起來你可以做
def makecov(rho, n):
out = numpy.eye(n) + rho
numpy.fill_diagonal(out, 1)
return out
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.