use*_*235 4 r cross-product rcpp rcpparmadillo
例如,对于R中的两个3D阵列,
N <- 1000
x <- rnorm(N*3*3); dim(x) <- c(N,3,3)
y <- rnorm(N*3*3); dim(y) <- c(N,3,3)
Run Code Online (Sandbox Code Playgroud)
我可以循环执行以下交叉乘积:
gg <- 0
for (n in 1:dim(x)[1]){
gg <- gg + t(x[n,,]) %*% y[n,,]
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在不使用循环的情况下,是否可以将其做得更大(例如通过矢量化或rcpp)更有效N?
如果用数学方式重写问题,则可以证明它等同于:
dim(x) <- c(3 * N, 3)
dim(y) <- c(3 * N, 3)
gg2 <- crossprod(x, y)
Run Code Online (Sandbox Code Playgroud)
这应该非常快,并且不能进行任何复制。
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |