R语言 通过沿着对角线执行计算填充矩阵

z31licg0  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(179)

我有一个矩阵nn,它的值沿着对角线分布,我想通过乘以对角线矩阵b的元素来创建一个新矩阵,对应于元素沿对角线的位置。
例如,假设我有一个4
4矩阵:

set.seed(5)
b <- diag(sample(4))
colnames(b) <- rownames(b) <- c("AAA" , "BBB" , "CCC" , "DDD")

给定矩阵b

AAA BBB CCC DDD
AAA   2   0   0   0
BBB   0   3   0   0
CCC   0   0   1   0
DDD   0   0   0   4

我想通过如下相乘来计算矩阵d

b[AAA , AAA] = 2 * 2 = 4

以及

b[AAA , BBB] = 2 * 3 = 6

最终结果应给予:

AAA BBB CCC DDD
AAA   4   6   2   8
BBB   6   9   3  12
CCC   2   3   1   4
DDD   8  12   4  16

有没有一个高效的代码可以做到这一点,而不必这样做的手?这将是不可能的,如果矩阵是非常大的。

a2mppw5e

a2mppw5e1#

你所描述的是对角线的外积,你可以通过以下方式得到:

outer(diag(b), diag(b))
    AAA BBB CCC DDD
AAA   4   6   2   8
BBB   6   9   3  12
CCC   2   3   1   4
DDD   8  12   4  16

diag(b) %o% diag(b)
    AAA BBB CCC DDD
AAA   4   6   2   8
BBB   6   9   3  12
CCC   2   3   1   4
DDD   8  12   4  16

相关问题