R中多个维度的诊断功能
Diag function om multiple dimensions in R
我想对向量列表使用 diag() 函数,以便获得矩阵列表,其中对角线是我的列表的向量。
更具体地说,假设我有一个名为 list
的列表,其中包含 100 个向量,每个向量有 14 个值。
>dim(list)
100 14
我想创建一个包含 100 个大小为 14x14 的矩阵的数组 array
,其中矩阵 diag2vec(array[i,,])
的对角线是我的向量 list[i,]
(矩阵中的所有其他值0
)。
所以我最终会得到:
>dim(array)
100 14 14
我尝试使用 diag() 函数,但我无法让它按行工作。
(M <- matrix(1:6, nrow = 2))
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6
sapply(1:nrow(M), function(i) diag(M[i, ]), simplify = "array")
# , , 1
#
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 0 3 0
# [3,] 0 0 5
#
# , , 2
#
# [,1] [,2] [,3]
# [1,] 2 0 0
# [2,] 0 4 0
# [3,] 0 0 6
此外,请注意 M
是一个矩阵,而不是列表,dim
应用于最后一个对象 returns 3 3 2
,这才是你真正想要的我想,而不是像你的例子中那样 2 3 3
。
第一次尝试太快了。
使用library(abind)
library(abind)
abind(lapply(x, diag), along = 0)
其中 x
假定为您的向量列表
假设您的数据如下所示:
z <- replicate(100, runif(14), simplify=FALSE)
尝试:
z2 <- aperm(vapply(z, diag, diag(14)), 3:1)
其中有:
> dim(z2)
[1] 100 14 14
我想对向量列表使用 diag() 函数,以便获得矩阵列表,其中对角线是我的列表的向量。
更具体地说,假设我有一个名为 list
的列表,其中包含 100 个向量,每个向量有 14 个值。
>dim(list)
100 14
我想创建一个包含 100 个大小为 14x14 的矩阵的数组 array
,其中矩阵 diag2vec(array[i,,])
的对角线是我的向量 list[i,]
(矩阵中的所有其他值0
)。
所以我最终会得到:
>dim(array)
100 14 14
我尝试使用 diag() 函数,但我无法让它按行工作。
(M <- matrix(1:6, nrow = 2))
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6
sapply(1:nrow(M), function(i) diag(M[i, ]), simplify = "array")
# , , 1
#
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 0 3 0
# [3,] 0 0 5
#
# , , 2
#
# [,1] [,2] [,3]
# [1,] 2 0 0
# [2,] 0 4 0
# [3,] 0 0 6
此外,请注意 M
是一个矩阵,而不是列表,dim
应用于最后一个对象 returns 3 3 2
,这才是你真正想要的我想,而不是像你的例子中那样 2 3 3
。
第一次尝试太快了。
使用library(abind)
library(abind)
abind(lapply(x, diag), along = 0)
其中 x
假定为您的向量列表
假设您的数据如下所示:
z <- replicate(100, runif(14), simplify=FALSE)
尝试:
z2 <- aperm(vapply(z, diag, diag(14)), 3:1)
其中有:
> dim(z2)
[1] 100 14 14