带R阵列的外部产品

时间:2017-10-17 07:28:33

标签: arrays r matrix linear-algebra

我有一个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))

1 个答案:

答案 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))