python - 如何处理邻接矩阵的内存错误?

标签 python pandas numpy cluster-analysis networkx

我正在使用 python 进行图聚类。该算法要求从图G传递的数据应该是邻接矩阵。但是,为了将 adjacency-matrix 获取为 numpy-array,如下所示:

import networkx as nx
matrix = nx.to_numpy_matrix(G)

我遇到内存错误。消息是MemoryError:无法为形状为 (609627, 609627) 和数据类型 float64 的数组分配 2.70 TiB

但是,我的设备是新的(Lenovo E490),Windows 64 位,内存 8 Gb

其他重要信息可能是:

Number of nodes: 609627
Number of edges: 915549

整个故事如下:

Graphtype = nx.Graph()
G = nx.from_pandas_edgelist(df, 'source','target', edge_attr='weight', create_using=Graphtype)

马尔可夫聚类

import markov_clustering as mc
import networkx as nx

matrix = nx.to_scipy_sparse_matrix(G) # build the matrix
result = mc.run_mcl(matrix)            # run MCL with default parameters

MemoryError

enter image description here

最佳答案

您尝试创建的矩阵的大小为 float64 609627x609627。每个 float64 使用 8 字节内存,您将需要 609627*609627*8~3TB 内存。那么你的系统只有 8GB,即使增加了物理内存,3TB 似乎太大了,无法运行。假设您的节点 ID 是整数,您可以使用 dtype=unit4(考虑所有 609627 节点),但它仍然需要超过 TB 的内存,这听起来难以访问。您正在尝试做什么,似乎您有一个稀疏矩阵,并且您可能可以采用另一种可能的方法来实现您的目标。邻接矩阵(除非压缩)似乎很难实现。

也许您可以受益于以下内容:

to_scipy_sparse_matrix(G, nodelist=None, dtype=None, weight='weight', format='csr')

networks包中。或者更确切地说,使用 Edgelist 来计算您想要实现的目标。

关于python - 如何处理邻接矩阵的内存错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61631553/

相关文章:

python - 编写一个在字典中存储信息的函数。 Python3错误: "SyntaxError: ' return' outside function"

python - 替换 Pandas 数据框中任何列中的值

python - 如何将 Pandas 组变成 SparseDataFrame

python - Groupby 在 Python 中的多个条件下对多列进行求和和计数

numpy - 计算图像中唯一颜色的数量

python - PyVISA 未在 Linux 上列出 USB 仪器

python - 在 rasa 中运行自定义操作时遇到错误

python - 在整个数据框中分离一个棘手的字符串

python - Scipy - 非线性方程组的所有解

Python 正则表达式;让 0 匹配 0 或 1