【发布时间】:2016-04-01 00:40:38
【问题描述】:
假设X 是一个大型稀疏矩阵,其中每一行只有一个不同于零的条目。我有一个向量pos,其中包含该非零元素所在列的位置。为了填充矩阵,以下循环起作用:
for (row in 1:nrow(X)) {
X[row, pos[row]] <- 1
}
有没有办法在没有循环的情况下做到这一点,也许使用sapply?
【问题讨论】:
假设X 是一个大型稀疏矩阵,其中每一行只有一个不同于零的条目。我有一个向量pos,其中包含该非零元素所在列的位置。为了填充矩阵,以下循环起作用:
for (row in 1:nrow(X)) {
X[row, pos[row]] <- 1
}
有没有办法在没有循环的情况下做到这一点,也许使用sapply?
【问题讨论】:
你可以看看 Matrix 中的sparseMatrix 函数:
> library(Matrix)
> (pos = sample(1:7))
[1] 5 1 6 4 7 2 3
> sparseMatrix(1:7, pos)
7 x 7 sparse Matrix of class "ngCMatrix"
[1,] . . . . | . .
[2,] | . . . . . .
[3,] . . . . . | .
[4,] . . . | . . .
[5,] . . . . . . |
[6,] . | . . . . .
[7,] . . | . . . .
Matrix 包中的函数需要一些使用,但在处理稀疏矩阵时它们提供了很多好处。
【讨论】:
X不一定是方阵,所以我用X <- sparseMatrix(i = 1:n, j = pos, x = 1),其中n是行数。