我有一个维度为 3x1000 的数组。事实上,每一列都是有趣的。我想用它来计算一个维度为 3x3x1000 的数组,其中板i
是原始数组的列i
的外积(换句话说,v %*% t(v)
)。有没有一种干净的方法来做到这一点?
下面是一个示例输入矩阵和输出数组,如果是 2x4 矩阵。
mat_in <- cbind(c(1, 2), c(3, 4), c(5, 6), c(7, 8))
arr_out <- array(c(1, 2, 2, 4, 9, 12, 12, 16, 25, 30, 30, 36, 49, 56, 56, 64),
dim = c(2, 2, 4))
这为您提供了所需的结果:
mat_in <- cbind(c(1, 2), c(3, 4), c(5, 6), c(7, 8))
array(apply(mat_in, 2, tcrossprod), dim=c(2,2,4))
### test:
arr_out <- array(c(1, 2, 2, 4, 9, 12, 12, 16, 25, 30, 30, 36, 49, 56, 56, 64),
dim = c(2, 2, 4))
arr_out - array(apply(mat_in, 2, tcrossprod), dim=c(2,2,4))