首页 > 解决方案 > 大型矩阵的 RAM 高效乘法 - R 中的 RAM 用完

问题描述

我想将一个大矩阵乘以其转置来创建一个邻接矩阵(维度:1,7 Mio * 1,700,二进制 = 0/1 个条目)。该矩阵将产生一个大矩阵 1,7 Mio。* 1,7 Mio..,适度稀疏。值是 1-50 之间的数字。

我在 R 和 Python 中尝试了多种方法,使用高达 250 GB RAM 的高性能服务器,但我根本无法让它工作。因此,任何关于可以工作的方法的提示都会受到高度赞赏

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

  1. igraph 包 routes_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)

我的想法在这里用完了,有什么方法可以解决这个问题?

标签: rnetwork-programmingsparse-matrixadjacency-matrix

解决方案


推荐阅读