大矩阵的RAM有效乘法-R中的RAM用完

时间:2019-05-24 12:32:30

标签: r network-programming sparse-matrix adjacency-matrix

我想将一个大矩阵与其转置相乘以创建一个邻接矩阵(尺寸:1,7 Mio * 1,700,二进制= 0/1项)。该矩阵将形成一个1,7 Mio的大矩阵。 * 1,7 Mio ..,中等稀疏。值是介于1到50之间的数字。

我已经在R和Python中尝试了多种方法,使用了高达250 GB RAM的高性能服务器,但是我根本无法使它正常工作。因此,所有可能有效的方法提示

我主要在R中工作,我已经尝试了以下方法:

  1. igraph软件包     route_igraph <-graph_from_data_frame(d =边,顶点=节点,     定向= TRUE)

  2. 手动矩阵乘法     adjacency_matrix <-t(bipartite_matrix_s)%*%bipartite_matrix_s

  3. “矩阵”稀疏矩阵乘法:即使在250 GB RAM服务器上,也会产生错误:地址0x2ad6b3385000,导致“内存未映射”。它适用于条目数较少的同一数据集,因此这应该是RAM问题。 (incidence_matrix = 1,7 Mio * 1,700),

    bipartite_matrix_s <- as_incidence_matrix(y, sparse = TRUE) #(WORKS)
    adjacency_matrix <- tcrossprod(t(bipartite_matrix_s)) #(CRASHES)
    

“ blockmatrix”乘法->这将执行逐步乘法,效果很好,但也可以节省整个矩阵(无法分配2,500 RAM的内存)

    library(blockmatrix)
    edges <- blockmatmult(t(bipartite_matrix_s), bipartite_matrix_s)
    edgelist <- cbind(test_blockmult)

我这里的想法不多了,有什么办法可以解决这个问题?

0 个答案:

没有答案