Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
5年前关闭。
Improve this question
我需要能够在python中处理大型(10 ^ 7个节点)图。对应于每个节点/边缘的数据是最少的,例如,少量的字符串。就内存和速度而言,最有效的方法是什么?
dict的dict更灵活,更易于实现,但我直观地期望列表列表会更快。 list选项还要求我将数据与结构分开,而dict则允许某种形式:
你有什么建议?
是的,我应该对效率的含义更加清楚。在这种特殊情况下,我的意思是随机访问检索。
将数据加载到内存中并不是一个大问题。一劳永逸。耗时的部分是访问节点,因此我可以提取信息并衡量我感兴趣的指标。
我没有考虑过将每个节点都设为一个类(所有节点的属性都相同),但这似乎会增加额外的开销?我希望有人能对他们可以分享的类似案例有一些直接的经验。毕竟,图是CS中最常见的抽象之一。
可视化也很简单:
更多可视化:http://jonschull.blogspot.com/2008/08/graph-visualization.html
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
5年前关闭。
Improve this question
我需要能够在python中处理大型(10 ^ 7个节点)图。对应于每个节点/边缘的数据是最少的,例如,少量的字符串。就内存和速度而言,最有效的方法是什么?
dict的dict更灵活,更易于实现,但我直观地期望列表列表会更快。 list选项还要求我将数据与结构分开,而dict则允许某种形式:
graph[I][J]["Property"]="value"
你有什么建议?
是的,我应该对效率的含义更加清楚。在这种特殊情况下,我的意思是随机访问检索。
将数据加载到内存中并不是一个大问题。一劳永逸。耗时的部分是访问节点,因此我可以提取信息并衡量我感兴趣的指标。
我没有考虑过将每个节点都设为一个类(所有节点的属性都相同),但这似乎会增加额外的开销?我希望有人能对他们可以分享的类似案例有一些直接的经验。毕竟,图是CS中最常见的抽象之一。
最佳答案
我强烈建议您看看NetworkX。它是经过战斗考验的战马,是大多数“研究”类型需要进行基于网络的数据分析时才能使用的第一个工具。我在笔记本上处理了具有数十万条边的图形,而没有出现问题。它的功能丰富,非常易于使用。您会发现自己将更多的精力放在眼前的问题上,而不是基础实现中的细节上。
Erdős-Rényi随机图生成和分析的示例
"""
Create an G{n,m} random graph with n nodes and m edges
and report some properties.
This graph is sometimes called the Erd##[m~Qs-Rényi graph
but is different from G{n,p} or binomial_graph which is also
sometimes called the Erd##[m~Qs-Rényi graph.
"""
__author__ = """Aric Hagberg (hagberg@lanl.gov)"""
__credits__ = """"""
# Copyright (C) 2004-2006 by
# Aric Hagberg
# Dan Schult
# Pieter Swart
# Distributed under the terms of the GNU Lesser General Public License
# http://www.gnu.org/copyleft/lesser.html
from networkx import *
import sys
n=10 # 10 nodes
m=20 # 20 edges
G=gnm_random_graph(n,m)
# some properties
print "node degree clustering"
for v in nodes(G):
print v,degree(G,v),clustering(G,v)
# print the adjacency list to terminal
write_adjlist(G,sys.stdout)
可视化也很简单:
更多可视化:http://jonschull.blogspot.com/2008/08/graph-visualization.html