4

例如,对于 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)

我可以循环执行以下叉积:

gg <- 0
for (n in 1:dim(x)[1]){
    gg <- gg + t(x[n,,]) %*% y[n,,]
}

我的问题是我们能否更有效地(例如,通过矢量化或rcppN而不是使用循环来做非常大的事情?

4

1 回答 1

5

如果你用数学方法重写你的问题,你可以证明它等价于:

dim(x) <- c(3 * N, 3)
dim(y) <- c(3 * N, 3)
gg2 <- crossprod(x, y)

这应该非常快并且不应该制作任何副本。

于 2019-03-20T06:15:29.867 回答