【问题标题】:convert simple triplet matrix(slam) to sparse matrix(Matrix) in R将简单的三元组矩阵(slam)转换为 R 中的稀疏矩阵(Matrix)
【发布时间】:2013-11-29 01:08:42
【问题描述】:

在 slam 包或 Matrix 包中是否有内置函数可以将简单三元组矩阵形式的稀疏矩阵(来自 slam 包)转换为 dgTMatrix/dgCMatrix 形式的稀疏矩阵(来自 Matrix 包)?

是否有一种内置方法可以从简单的三元组矩阵中访问非零条目?

我在 R 工作

【问题讨论】:

  • 你不可能在这类问题上得到太多帮助。您的情况的可重现示例将有很大帮助,至少还有一些代码显示您到目前为止所尝试的内容。
  • 这个问题不需要可重现的例子。一个简单的三元矩阵是一个简单的三元矩阵,不管它包含什么数据。我问这个问题是为了查找任一包中是否有内置函数来支持两者之间的转换。我不是要求我可以自己做的临时代码。
  • 不,似乎没有内置函数可以在 Matrix 和 slam 包生成的稀疏矩阵之间进行转换。

标签: r matrix sparse-matrix


【解决方案1】:

其实有一种内置方式:

simple_triplet_matrix_sparse <-  sparseMatrix(i=simple_triplet_matrix_sparse$i, j=simple_triplet_matrix_sparse$j, x=simple_triplet_matrix_sparse$v,
           dims=c(simple_triplet_matrix_sparse$nrow, simple_triplet_matrix_sparse$ncol))

根据我自己的经验,这个技巧为我节省了大量的时间和痛苦,以及使用 tm 包进行大规模文本挖掘的计算机崩溃。这个问题真的不需要一个可重复的例子。一个简单的三元矩阵是一个简单的三元矩阵,不管它包含什么数据。这个问题只是询问是否有任何一个包中的内置函数来支持两者之间的转换。

【讨论】:

  • 我不同意。通过可重复的示例,像您这样的是/否问题将获得更多信息性答案,并且它们将包含实际示例。您看到多个答案的机会也会大大提高。
【解决方案2】:

稍作修改。 sparseMatrix 将整数作为输入,而 slam 将 i、j 作为因子,v 可以是任何值

as.sparseMatrix <- function(simple_triplet_matrix_sparse) {

  sparseMatrix(
    i = simple_triplet_matrix_sparse$i,
    j = simple_triplet_matrix_sparse$j,
    x = simple_triplet_matrix_sparse$v,
    dims = c(
      simple_triplet_matrix_sparse$nrow, 
      simple_triplet_matrix_sparse$ncol
      ),
    dimnames = dimnames(simple_triplet_matrix_sparse)
  )

}

【讨论】:

  • slam:: 包不将索引存储为因子(截至 2020 年),因此不需要调用 as.numeric()。否则,这是一个很好的功能。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2021-11-25
  • 2017-07-02
  • 2013-06-26
  • 1970-01-01
  • 2012-06-20
  • 2012-09-04
  • 2015-07-24
相关资源
最近更新 更多