假设我有一个大的稀疏矩阵:
library(Matrix)
nrow <- 223045
ncol <- 9698
big <- Matrix(0, nrow, ncol, sparse = TRUE)
big[1, 1] <- 1
现在我想访问第一个元素:
big[1]
Error in asMethod(object) :
Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105
出于某种原因,它试图将我的矩阵转换为密集矩阵。事实上,看起来该方法是从 Matrix 继承的,而不是从稀疏类继承的:
showMethods("[")
[...]
x="dgCMatrix", i="numeric", j="missing", drop="missing"
(inherited from: x="Matrix", i="index", j="missing", drop="missing")
[...]
当然我可以使用完整的[i, j]
索引
big[1, 1]
但我想访问整个矩阵中的一些随机元素,比如
random.idx <- c(1880445160, 660026771, 1425388501, 400708750, 2026594194, 1911948714)
big[ random.idx ]
并且无法使用 [i, j]
符号访问它们(或者您需要按元素进行操作,效率不高)。
如何在不将矩阵转换为密集矩阵的情况下访问该矩阵的随机元素?欢迎使用替代解决方案(其他包等)。
最佳答案
可以直接使用S4提取@
提取Matrix的元素,无需先将其转换为普通矩阵。例如,
big@x[1]
big@x[random.idx]
事实上,您还可以提取其他属性。参见 str(big)
。
关于r - 如何从 R Matrix 库访问稀疏矩阵的一些元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26849898/