我有一个3x1000维的数组。事实上,每一栏都很有趣。我想用它来计算一个3x3x1000维的数组,其中slab 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))
答案 0 :(得分:1)
这可以为您提供所需的结果:
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))