如何在 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
我知道如何制作一个包含 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