【问题标题】:Linear Independence of Large Sparse Matrices in RR中大型稀疏矩阵的线性无关
【发布时间】:2013-05-20 11:39:24
【问题描述】:

我有三个大矩阵:I、G 和 G^2。这些是 400 万 x 400 万矩阵,它们是稀疏的。我想检查它们是否是线性独立的,我想在 R 中这样做。

对于小矩阵,一种方法是对每个矩阵进行向量化:将列堆叠在一起,并测试由三个堆叠向量形成的矩阵是否具有 3 级。

但是,由于我的问题的规模,我不确定如何进行。

(1) 有没有办法在 R 中将大稀疏矩阵向量化为非常大的稀疏向量?

(2) 是否有任何其他解决方案可以使该测试有效?

提前致谢

【问题讨论】:

    标签: r sparse-matrix linear-algebra large-data


    【解决方案1】:

    将矩阵转换为向量时,只能保留非零元素。

    # Sample data
    n <- 4e6
    k <- n
    library(Matrix)
    I <- spMatrix(n, n, 1:n, 1:n, rep(1,n))
    G <- spMatrix(n, n, 
      sample(1:n, k, replace=TRUE), 
      sample(1:n, k, replace=TRUE), 
      sample(0:9, k, replace=TRUE)
    )
    G2 <- G %*% G
    G2 <- as(G2, "dgTMatrix")  # For the j slot
    
    # Only keep elements that are non-zero in one of the 3 matrices
    i <- as.integer( c(G@i, G2@i, I@i) + 1 )
    j <- as.integer( c(G@j, G2@j, I@j) + 1 )
    ij <- cbind(i,j)
    rankMatrix( cbind( G2[ij], G[ij], I[ij] ) ) # 3
    
    # Another example
    m <- ceiling(n/2)-1
    G <- spMatrix(n, n,
      c(1:n, 2*(1:m)),
      c(1:n, 2*(1:m)+1),
      rep(1, n+m)
    )
    G2 <- as(G %*% G, "dgTMatrix")
    i <- c(G@i, G2@i, I@i) + 1
    j <- c(G@j, G2@j, I@j) + 1
    ij <- cbind(i,j)
    rankMatrix( cbind( G2[ij], G[ij], I[ij] ) ) # 2
    

    (为了加快速度,你可以只取这些向量的一小部分: 如果等级已经是3,你知道他们是独立的, 如果是2,你可以检查线性依赖关系是否也适用于大向量。)

    【讨论】:

    • 正是我想要的!非常感谢!
    • 我遇到了 ij
    • 确保索引是整数会减少内存使用量,但只是减少了两倍:这可能还不够。
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 2015-11-28
    • 2012-09-04
    • 1970-01-01
    • 2021-09-22
    • 2015-03-01
    • 2013-06-09
    • 1970-01-01
    相关资源
    最近更新 更多