R中的快速矩阵计算

omu*_*mun 1 r matrix

我需要计算:

在此输入图像描述

我可以进一步将其分解为:

在此输入图像描述

在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)

Rol*_*and 7

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)