【发布时间】:2020-08-28 23:31:02
【问题描述】:
我在具有 128 GB 内存的 Linux 服务器上使用 python 语言。我正在使用 马尔可夫算法 进行图形聚类。具体流程如下:
Graphtype = nx.Graph()
G = nx.from_pandas_edgelist(df, 'source','target', edge_attr='weight', create_using=Graphtype)
图表详情:
Name:
Type: Graph
Number of nodes: 4533801
Number of edges: 10548751
Average degree: 4.6534
图是连通的吗?
nx.is_connected(G)
False
连通分量数
print(nx.number_connected_components(G))
7254
马尔可夫聚类
import markov_clustering as mc
import networkx as nx
matrix = nx.to_scipy_sparse_matrix(Gc) # build the matrix
result = mc.run_mcl(matrix) # run MCL with default parameters
clusters = mc.get_clusters(result) # get clusters
MemoryError
为什么我在尝试提取集群时仍然收到 内存错误 消息? 问题是什么?我该如何解决这个问题?
更新:
【问题讨论】:
-
您有 两个 图表,
G和Gc。Gc长什么样子? -
你知道你实际可以使用多少内存吗?有时它小于系统内存。试试
numpy.ndarray(2**32),大约需要 16GB。 -
您运行的是 32 位还是 64 位版本的 Python?请与
python -c 'import struct; print(struct.calcsize("P") * 8)'联系。无论服务器有多少,32 位版本都会将您的 RAM 限制在 4 GB 以下。 -
.copy()可能是问题的一部分。即使您可以表示完整图,也可能无法在没有内存问题的情况下表示完整图的两个副本。该行表示正在复制表示图形的完整稀疏矩阵。这个矩阵有多大?它是否低于您可用内存的一半? -
再往上看,有一个对
inflate的调用。其来源最终导致了 scikit-learn 的sklearn.preprocessing.normalize方法。该文档说稀疏矩阵必须采用 CSR 格式“以避免不必要的复制”。您的矩阵格式是否正确?
标签: python pandas graph cluster-analysis networkx