r - 大型矩阵的 RAM 高效乘法 - R 中的 RAM 用完
问题描述
我想将一个大矩阵乘以其转置来创建一个邻接矩阵(维度:1,7 Mio * 1,700,二进制 = 0/1 个条目)。该矩阵将产生一个大矩阵 1,7 Mio。* 1,7 Mio..,适度稀疏。值是 1-50 之间的数字。
我在 R 和 Python 中尝试了多种方法,使用高达 250 GB RAM 的高性能服务器,但我根本无法让它工作。因此,任何关于可以工作的方法的提示都会受到高度赞赏
我主要在 R 中工作,我已经尝试过以下方法:
igraph 包 routes_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)
我的想法在这里用完了,有什么方法可以解决这个问题?
解决方案
推荐阅读
- flutter - Flutter:找不到 String.xml 文件
- c - (简而言之)它是如何工作的?
- ruby-on-rails - 如何绕过 validates_email_format_of 验证以保存 nil 电子邮件值?
- javascript - 无法向自己发出 POST 请求
- c++ - c++ 字符串中的字符被忽略
- docker - Azure 容器注册表是多区域的吗?
- python - 通过右键单击 UI 在 Maya 中运行脚本?
- audiokit - AKMIDICallbackInstrument 处理超过 16 个通道
- javascript - 在图像的特定位置绘制黑点
- javascript - 在 app.get(...) 中表达未定义的变量