从位置矩阵为稀疏矩阵创建向量 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
我可以创建向量 x
和 i
,它们相当于 SMatrix@x
和 SMatrix@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
到行或列索引。
假设我想创建一个稀疏矩阵 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
我可以创建向量 x
和 i
,它们相当于 SMatrix@x
和 SMatrix@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
到行或列索引。