【发布时间】:2015-07-09 02:06:40
【问题描述】:
在 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
但是在 pandas 中,我们如何有效地创建相同的矩阵? 这是我的解决方案:
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. ]])
有没有更优雅的方法可以用 pandas 做到这一点?
【问题讨论】:
-
你的 r 函数可能只是
`diag<-`(matrix(.2, 3, 3), 1) -
我正在阅读 The Art of R Programming。R 函数只是来自这本书。我尝试用 pandas 重写这个 R 函数。但是你的评论很好!
标签: python r matrix pandas statsmodels