我很难加快此功能的速度(当样本量为10,000时,这对我来说至关重要)。有什么好心可以帮助我吗?
我正在制作一个玩具,其代码可完全复制:
omega_w <- function(X){
X <- as.matrix(X)
n <- dim(X)[1]
kdim <- dim(X)[2]
omega <- matrix(0, nrow = n, ncol = n) # n x n
for (j in 1:n){
for (l in 1:j){
for (r in 1:n){
x.jr <- ((X[j,])-(X[r,]))
x.lr <- ((X[l,])-(X[r,]))
if (l==r && j==r){
omega[j,l] <- omega[j,l] + 2*pi }
else if ((l==r || j==r) && j!=l){
omega[j,l] <- omega[j,l] + pi }
else if (l==j && j!=r){
omega[j,l] <- omega[j,l] + pi }
else {
omega[j,l] <- omega[j,l] + abs(pi - acos(cor(x.jr,x.lr)))
}
}
}
}
omega <- (omega + t(as.matrix(Matrix::tril(omega,-1)))) * pi^(kdim/2-1)/gamma(kdim/2 +1)
return(omega)
}
x <- as.matrix(rnorm(10000*20),10000,20)
w <- omega_w(x)
我非常感谢任何有关使此功能“更好”和提高计算效率的指导。我实际上并不担心大型矩阵,因为我将使用与样本中的样本大小大致相同的样本大小。
谢谢!