【问题标题】:sparseMatrix command in RR中的sparseMatrix命令
【发布时间】:2016-03-19 21:34:08
【问题描述】:

如何使用R(Matrix包)中的sparseMatrix命令来构造下面的矩阵

[1,] 1.002 0.210 0.002  .      .      .       2.943   0.051
[2,] 0.210 1.002 0.210  .      .      .       7.515   2.943
[3,] 0.002 0.210 1.002  .      .      .       0.843   7.515
[4,] .     .     .     16.003  3.354  0.031  18.691   1.122
[5,] .     .     .      3.354 16.003  3.354  13.675  18.691
[6,] .     .     .      0.031  3.354 16.003   0.440  13.675
[7,] 2.943 7.515 0.843 18.691 13.675  0.440 109.002  22.848
[8,] 0.051 2.943 7.515  1.122 18.691 13.675  22.848 109.002

我还提供了 dput 命令,以便能够将矩阵复制到您的控制台中

new("dsCMatrix"
    , i = c(0L, 0L, 1L, 0L, 1L, 2L, 3L, 3L, 4L, 3L, 4L, 5L, 0L, 1L, 2L, 
3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L)
    , p = c(0L, 1L, 3L, 6L, 7L, 9L, 12L, 19L, 27L)
    , Dim = c(8L, 8L)
    , Dimnames = list(NULL, NULL)
    , x = c(1.002, 0.21, 1.002, 0.002, 0.21, 1.002, 16.003, 3.354, 16.003, 
0.031, 3.354, 16.003, 2.943, 7.515, 0.843, 18.691, 13.675, 0.44, 
109.002, 0.051, 2.943, 7.515, 1.122, 18.691, 13.675, 22.848, 
109.002)
    , uplo = "U"
    , factors = list()
)

【问题讨论】:

  • 您需要提供行、列索引和'x'或值
  • @akrun 我无法理解命令所需的非零元素的确切结构
  • 你必须将rowindex作为向量传递,例如第一个元素1.002是row1,同一列的第二个元素是0.210,所以,sparseMatrix(c(1,2,..), c(1,1,...), x=c(1.002, 0.210,...)
  • @akrun 有没有办法在构造稀疏矩阵后提取非零元素?
  • 我不确定您现在有什么问题?你想构造一个 sparseMatrix 还是别的什么?

标签: r matrix sparse-matrix


【解决方案1】:

您有一个 CsparseMatrix 并且它们没有列索引,但是很容易强制转换为具有它们的 TsparseMatrix。 i 和 j 参数(内部 x 值中存在的值)基于 0 而不是基于 1,因此如果您想用它们解决某些问题,则需要添加 1。

 CSM <- new("dsCMatrix"
     , i = c(0L, 0L, 1L, 0L, 1L, 2L, 3L, 3L, 4L, 3L, 4L, 5L, 0L, 1L, 2L, 
 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L)
     , p = c(0L, 1L, 3L, 6L, 7L, 9L, 12L, 19L, 27L)
     , Dim = c(8L, 8L)
     , Dimnames = list(NULL, NULL)
     , x = c(1.002, 0.21, 1.002, 0.002, 0.21, 1.002, 16.003, 3.354, 16.003, 
 0.031, 3.354, 16.003, 2.943, 7.515, 0.843, 18.691, 13.675, 0.44, 
 109.002, 0.051, 2.943, 7.515, 1.122, 18.691, 13.675, 22.848, 
 109.002)
     , uplo = "U"
     , factors = list()
 )
 TSM <-as(CSM, "TsparseMatrix")
 TSM@i
# [1] 0 0 1 0 1 2 3 3 4 3 4 5 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7
 TSM@j
# [1] 0 1 1 2 2 2 3 4 4 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7
 TSM@j +1
# [1] 1 2 2 3 3 3 4 5 5 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8
 TSM@i +1
# [1] 1 1 2 1 2 3 4 4 5 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2014-11-05
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多