我试图找到一种有效的方法来检索R中稀疏矩阵的非零上三角形元素的列表/向量/数组。 例如:
library(igraph)
Gmini <- as.directed(graph.lattice(c(3,5)))
GminiMat <- sparseMatrix(i=get.edgelist(Gmini)[,1],j=get.edgelist(Gmini)[,2],x=1:length(E(Gmini)))
GminiMat
15 x 15 sparse Matrix of class "dgCMatrix"
[1,] . 1 . 2 . . . . . . . . . . .
[2,] 23 . 3 . 4 . . . . . . . . . .
[3,] . 25 . . . 5 . . . . . . . . .
[4,] 24 . . . 6 . 7 . . . . . . . .
[5,] . 26 . 28 . 8 . 9 . . . . . . .
[6,] . . 27 . 30 . . . 10 . . . . . .
[7,] . . . 29 . . . 11 . 12 . . . . .
[8,] . . . . 31 . 33 . 13 . 14 . . . .
[9,] . . . . . 32 . 35 . . . 15 . . .
[10,] . . . . . . 34 . . . 16 . 17 . .
[11,] . . . . . . . 36 . 38 . 18 . 19 .
[12,] . . . . . . . . 37 . 40 . . . 20
[13,] . . . . . . . . . 39 . . . 21 .
[14,] . . . . . . . . . . 41 . 43 . 22
[15,] . . . . . . . . . . . 42 . 44 .
理想情况下,我想创建一个函数getUpper(mat) getUpper(GminiMat) 将产生1:22的向量(GminiMat的上三角非零项)
理想情况下,我需要一种相当记忆和速度有效的方法,因为我可能需要将它应用于大型系统(例如,矩阵可能来自一个多维点阵,每个维度有几百个节点)。
答案 0 :(得分:4)
您应该使用summary
功能。参见
subset(summary(GminiMat), j > i)
从那里拿走它。也许:
getUpper <- function(mat) subset(summary(mat), j > i)$x
答案 1 :(得分:3)
矩阵包中有一个方法triu
将返回上三角形,同时保留稀疏度:
triu(GminiMat)
15 x 15 sparse Matrix of class "dtCMatrix"
[1,] . 1 . 2 . . . . . . . . . . .
[2,] . . 3 . 4 . . . . . . . . . .
[3,] . . . . . 5 . . . . . . . . .
[4,] . . . . 6 . 7 . . . . . . . .
[5,] . . . . . 8 . 9 . . . . . . .
[6,] . . . . . . . . 10 . . . . . .
[7,] . . . . . . . 11 . 12 . . . . .
[8,] . . . . . . . . 13 . 14 . . . .
[9,] . . . . . . . . . . . 15 . . .
[10,] . . . . . . . . . . 16 . 17 . .
[11,] . . . . . . . . . . . 18 . 19 .
[12,] . . . . . . . . . . . . . . 20
[13,] . . . . . . . . . . . . . 21 .
[14,] . . . . . . . . . . . . . . 22
[15,] . . . . . . . . . . . . . . .