例如,对于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?
我想在rcpp中更改ListMatrix列表的元素,但始终无法做到这一点.请参阅以下玩具示例:
library("Rcpp")
cppFunction('
ListMatrix ListMatrixType(ListMatrix x){
NumericMatrix a = x(0,0);
a(0,0) = 100;
return x;
}
')
x = matrix(list(matrix(0,3,2)),2,2)
a = ListMatrixType(x)
a[[1,1]]
a[[2,2]]
Run Code Online (Sandbox Code Playgroud)
我希望只会a[[1,1]改变,但为什么a[[2,2]]也会改变?
> a[[1,1]]
[,1] [,2]
[1,] 100 0
[2,] 0 0
[3,] 0 0
> a[[2,2]]
[,1] [,2]
[1,] 100 0
[2,] 0 0
[3,] 0 0
Run Code Online (Sandbox Code Playgroud)
我必须误解rcpp中的索引规则.所以我的问题是如何正确更改每个列表的元素?我想每个列表都包含一个矩阵.