我想将一个大矩阵与其转置相乘以创建一个邻接矩阵(尺寸:1,7 Mio * 1,700,二进制= 0/1项)。该矩阵将形成一个1,7 Mio的大矩阵。 * 1,7 Mio ..,中等稀疏。值是介于1到50之间的数字。
我已经在R和Python中尝试了多种方法,使用了高达250 GB RAM的高性能服务器,但是我根本无法使它正常工作。因此,所有可能有效的方法提示
我主要在R中工作,我已经尝试了以下方法:
igraph软件包 route_igraph <-graph_from_data_frame(d =边,顶点=节点, 定向= TRUE)
手动矩阵乘法 adjacency_matrix <-t(bipartite_matrix_s)%*%bipartite_matrix_s
“矩阵”稀疏矩阵乘法:即使在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)
我这里的想法不多了,有什么办法可以解决这个问题?