簡體   English   中英

從矩陣列表中獲取選定的矩陣列

[英]Getting selected matrix columns from a list of matrices

我有一個具有相同尺寸的矩陣列表,例如:

mat.list=rep(list(matrix(rnorm(n=12,mean=1,sd=1), nrow = 3, ncol=4)),3)

我正在尋找一種有效的方法來從列表中的每個矩陣中檢索列,其中每個矩陣的感興趣的列索引由向量指定。 例如,對於此列索引向量:

idx.vec=c(3,2,3)

我想從矩陣1的第3列,矩陣2的第2列和矩陣3的第3列,作為矩陣,以便這個矩陣維度是列表中矩陣的行數乘以矩陣中的矩陣數。名單。

對於此示例,結果將是:

cbind(mat.list[[1]][,3],mat.list[[2]][,2],mat.list[[3]][,3])
           [,1]      [,2]       [,3]
[1,]  1.4852810  1.305448  1.4852810
[2,]  1.8647327 -1.237507  1.8647327
[3,] -0.0416013  2.156055 -0.0416013

一種可能的方法是mapply('[', mat.list, TRUE, idx.vec) 訣竅是使用'['進行子集化,使用TRUE作為參數來選擇所有行。 下面是它的工作原理:

'['(matrix(1:4, ncol = 2), TRUE, 2)
# [1] 3 4

另一個(丑陋的)方法是lapply(mat.list, "[",,idx.vec)[[1]]

> set.seed(1)
> mat.list=rep(list(matrix(rnorm(n=12,mean=1,sd=1), nrow = 3, ncol=4)),3)
> idx.vec=c(3,2,3)
> lapply(mat.list, "[",,idx.vec)[[1]]
         [,1]      [,2]     [,3]
[1,] 1.487429 2.5952808 1.487429
[2,] 1.738325 1.3295078 1.738325
[3,] 1.575781 0.1795316 1.575781

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM