我需要计算:
我可以进一步将其分解为:
在RI中写了这段代码
att_num <- dim(X)[2]
A <- matrix(0, att_num, att_num)
for(i in seq(att_num)) A[,i] <- colSums(dx * X * X[,i])
Run Code Online (Sandbox Code Playgroud)
但由于循环,它是可怕的慢.这一行占用了我脚本中的大部分计算时间.有没有办法可以改进这个计算?
dx 是一个大小为1 xm的向量X 是一个大小为[nxm]的矩阵例:
dx <- sample(1:100, 30, replace=T)
X <- data.frame(replicate(30,sample(0:1,100,rep=TRUE)))
att_num <- dim(X)[2]
A <- matrix(0, att_num, att_num)
for(i in seq(att_num)) A[,i] <- colSums(dx * X * X[,i])
Run Code Online (Sandbox Code Playgroud)
set.seed(42)
dx <- sample(1:100, 30, replace=T)
X <- data.frame(replicate(10,sample(0:1,100,rep=TRUE)))
att_num <- dim(X)[2]
A <- matrix(0, att_num, att_num)
for(i in seq(att_num)) A[,i] <- colSums(dx * X * X[,i])
B <- crossprod(as.matrix(dx * X), as.matrix(X))
all.equal(A, unname(B))
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)