如何在 R 中制作对角矩阵数组?

How to make an array of diagonal matrices in R?

我知道如何制作一个包含 N 个 p*p 矩阵的数组:

m=array(x, c(p,p,N))

其中x可以是矢量或标量。我想制作一个对角矩阵数组。每个矩阵都应该是对角线的。我尝试了几种方法,但它们不起作用。有人知道吗?

有点笨拙,但你可以这样做:

n = 3
num_of_matrix = 2

array(rep(c(diag(n)),num_of_matrix),c(n,n,num_of_matrix))
#, , 1

#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1

#, , 2

#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1

如果你不介意使用包,你可以使用 abind:

library(abind)
do.call(abind, c(rep(list(diag(3)), 2), along = 3))
#, , 1
#
#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1
#
#, , 2
#
#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    1    0
#[3,]    0    0    1