【问题标题】:How to make an array of diagonal matrices in R?如何在R中制作对角矩阵数组?
【发布时间】:2015-03-24 15:10:08
【问题描述】:

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

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

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

【问题讨论】:

标签: arrays r matrix diagonal


【解决方案1】:

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

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

【讨论】:

  • 在填充数组时使用R的隐式回收,只做array(diag(n), c(n,n,num_of_matrix))
  • 真的!为了更清楚,我更愿意提及所有内容,但我的削减方式是array(c(diag(n)),c(n,n,num_of_matrix)),你的要好得多:)!
【解决方案2】:

如果你不介意使用包,你可以使用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

【讨论】:

  • 不错的图书馆,不知道!
  • @ColonelBeauvel 没有你的回答那么有效率,但也不必伤脑筋想太多。
  • 谢谢@Roland。我不知道这个图书馆。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多