1

我正在通过制作标签网络来分析博客网络(博客之间的边缘共享公共标签,权重=共享标签的数量/标签的总数。图中大约有 10000 个节点。我需要转换将原始数据转换为 GraphML 格式,为此,我正在使用 python networkx。但它内存不足。我是 python 新手,所以谁能告诉我我在这里做错了什么。(或者是硬件问题?我的系统是i3,3GB内存)

#!/usr/bin/env python
import sys
import networkx as nx
G=nx.Graph()
tags=[]
for line in open(sys.argv[1]):#Each blog has all its tags in a single line
    tags.append(set(line.split(',')))#tags are separated by comma.
for i in xrange(len(tags)):
    G.add_node(i+1)
for i in xrange(len(tags)):
    for j in xrange(i+1,len(tags)):
        p=len(tags[i].intersection(tags[j]))
        q=len(tags[i].union(tags[j]))
        if p!=0 and q!=0:
            G.add_edge(i+1,j+1,weight=float(p)/q)
nx.write_graphml(G,sys.argv[1]+'.graphml')
4

1 回答 1

0

我能看到的唯一改进是我可以为每个标签使用一个二进制标志位,而不是为标签制作一个 2D 列表。所以它的内存要求较低(因为标签可能很长,不同标签的数量只有~150,所以有很多重复)。这变化不大。问题出在评论中提到的 Aric 之类的 write_graphml 函数上。我终于也能在 16 GB 的机器上运行它了,它需要大约 9.5 GB。
PS:如果有人知道更好的技术,请告诉我。

于 2013-03-18T20:14:52.980 回答