从位置矩阵为稀疏矩阵创建向量 p

Create vector p for a sparse Matrix from a matrix of positions

假设我想创建一个稀疏矩阵 SMatrix,其中所有非零值都是 1。 我已经有一个 positions 的矩阵,其中第 1 列存储行索引,第 2 列存储列索引:

vec1 <- c(10,1)
vec2 <- c(12,1)
vec3 <- c(2,3)

positions <- matrix(c(vec1, vec2, vec3),
                    ncol=2,
                    dimnames = list(NULL, c("row", "col")),
                    byrow = T)
positions
     row col
[1,]  10   1
[2,]  12   1
[3,]   2   3

我可以创建向量 xi,它们相当于 SMatrix@xSMatrix@i,如下所示:

x <- rep(1, nrow(positions))
i <- positions[order(positions[,2]),1] - 1

但是我如何创建向量 p,它应该等同于 SMatrix@p

您可以使用 Matrix::sparseMatrix 获取行或列索引的压缩或指针表示。

Matrix::sparseMatrix(positions[,1], positions[,2], x=1)@p
#[1] 0 2 2 3

或使用 diffinv 如:

diffinv(c(table(factor(positions[,2], seq_len(max(positions[,2]))))))
#[1] 0 2 2 3

做相反的事情:

dp <- diff(p)
rep(seq_along(dp),dp)

手册中给出的扩展形式 p 到行或列索引。