从稀疏矩阵中提取i和j

Zac*_*ach 2 r sparse-matrix

我可以使用i,j和x的向量定义稀疏矩阵:

i <- c(1,3:8)
j <- c(2,9,6:10)
x <- 7 * (1:7)
(A <- sparseMatrix(i, j, x = x))
Run Code Online (Sandbox Code Playgroud)

我想提取i,j以及x从该稀疏矩阵的元素,所以我可以重新创建另一个包中的矩阵.这是容易ix:

i <- A@i + 1
x <- A@x
Run Code Online (Sandbox Code Playgroud)

(注意,i和x的顺序已经改变,但它们的相对关联是相同的:i = 4仍然在x = 21的同一位置)

但是,稀疏矩阵的最后一个元素是p:"指针的数字(整数值)向量,每列(或行)一个,到列(或行)中元素的初始(从零开始)索引. "

如何转换A@iA@p转换为j用于定义矩阵的原始元素?

nog*_*pes 6

弄清楚列的存储方式有点棘手.我很难解释它,但也许代码可以帮助你了解正在发生的事情:

# Rows
A@i+1 
# [1] 1 4 5 6 3 7 8

# Cols (a little tricky..)
findInterval(seq(A@x)-1,A@p[-1])+1
# [1]  2  6  7  8  9  9 10

# Values
A@x
# [1]  7 21 28 35 14 42 49
Run Code Online (Sandbox Code Playgroud)

因此,删除第A@p一个元素后,每列都有一个元素.范围A@p+11:length(A@x).基本上,对于每一列,它表示A@x此列中出现的第一个元素位于此索引处A@x.但棘手的部分是,如果该列中没有任何内容,则它使用最后一列的索引.这是我的不好解释......希望它能与代码结合起来.