如何使用邻接矩阵处理内存错误?
How to handle memory errors with adjacency matrix?
我正在使用 python 进行图形聚类。该算法要求图 G
传递的数据应该是邻接矩阵。然而,为了得到 adjacency-matrix
作为 numpy-array
像这样:
import networkx as nx
matrix = nx.to_numpy_matrix(G)
我遇到内存错误。消息是MemoryError: Unable to allocate 2.70 TiB for an array with shape (609627, 609627) and data type float64
但是,我的设备是新的(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
您尝试创建的矩阵大小为 609627x609627
float64。每个 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 进行图形聚类。该算法要求图 G
传递的数据应该是邻接矩阵。然而,为了得到 adjacency-matrix
作为 numpy-array
像这样:
import networkx as nx
matrix = nx.to_numpy_matrix(G)
我遇到内存错误。消息是MemoryError: Unable to allocate 2.70 TiB for an array with shape (609627, 609627) and data type float64
但是,我的设备是新的(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
您尝试创建的矩阵大小为 609627x609627
float64。每个 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 来计算您想要实现的目标。