我可以使用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从该稀疏矩阵的元素,所以我可以重新创建另一个包中的矩阵.这是容易i和x:
i <- A@i + 1
x <- A@x
Run Code Online (Sandbox Code Playgroud)
(注意,i和x的顺序已经改变,但它们的相对关联是相同的:i = 4仍然在x = 21的同一位置)
但是,稀疏矩阵的最后一个元素是p:"指针的数字(整数值)向量,每列(或行)一个,到列(或行)中元素的初始(从零开始)索引. "
如何转换A@i并A@p转换为j用于定义矩阵的原始元素?
弄清楚列的存储方式有点棘手.我很难解释它,但也许代码可以帮助你了解正在发生的事情:
# 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+1是1:length(A@x).基本上,对于每一列,它表示A@x此列中出现的第一个元素位于此索引处A@x.但棘手的部分是,如果该列中没有任何内容,则它使用最后一列的索引.这是我的不好解释......希望它能与代码结合起来.
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |