R语言 如何从向量中提取值并创建对角矩阵?

nmpmafwu  于 2023-02-06  发布在  其他
关注(0)|答案(3)|浏览(182)

我有一个n个数的向量,为了简单起见,假设

test <- c(1:100)

使用diag()构造向量的对角矩阵非常简单。
但是,我想提取向量的每个值,并创建一个4x4矩阵,其中提取的值位于i = 1和j = 1(左上角),所有其他值为零。
就我个人而言,我完全不知道该怎么做。
我为什么要这样做?我正在执行输入/输出分析,并希望计算一个扇区的不可操作性。为此,我需要扇区恢复时间,这是在一个向量的1000随机产生的恢复时间从一个珀特分布。
更准确地说:
如果我有一个1:100的向量,我想从1:100中提取每个值,并创建一个单独的矩阵,如下所示(1到100):

xqnpmsa8

xqnpmsa81#

稍微短一点的版本是

lapply(1:100, function(x) matrix(c(x, rep(0, 15)), 4))
bbuxkriu

bbuxkriu2#

lapply(1:100, \(z) {
    m <- matrix(0, nrow = 4, ncol = 4);
    m[1,1] <- z;
    m})

如果可能,稀疏矩阵可以是更高效存储器:

lapply(1:100, \(z) {
    Matrix::sparseMatrix(1, 1, x = z, dims = c(4,4))
})
laawzig2

laawzig23#

另一种选择是使用3D阵列:

test <- 1:100
nr <- 3L
nc <- 4L
a <- array(0L, c(3, 4, length(test)))
a[1,1,] <- test
a[,,1]
#>      [,1] [,2] [,3] [,4]
#> [1,]    1    0    0    0
#> [2,]    0    0    0    0
#> [3,]    0    0    0    0
a[,,12]
#>      [,1] [,2] [,3] [,4]
#> [1,]   12    0    0    0
#> [2,]    0    0    0    0
#> [3,]    0    0    0    0

相关问题