2012-08-27 66 views

回答

3

假设通过“添加大量的边缘在一起”你的意思是“将它们添加到图”,从help(networkx.Graph)

| **Edges:** 
| 
| G can also be grown by adding edges. 
| 
| Add one edge, 
| 
| >>> G.add_edge(1, 2) 
| 
| a list of edges, 
| 
| >>> G.add_edges_from([(1,2),(1,3)]) 

所以:

>>> import networkx as nx 
>>> g = nx.Graph() 
>>> g.add_edges_from([(0,4),(1,2),(2,3)]) 
>>> g 
<networkx.classes.graph.Graph object at 0x1004b58d0> 
>>> g.edges() 
[(0, 4), (1, 2), (2, 3)] 

我肯定会推荐养成阅读交互式文档的习惯。我使用的是IPython,所以我只需要快速查看可用的方法即可制作图形g,然后键入g.[TAB]。这提出了一个清单,g.add_edges_from是#3。

OTOH,如果你只是想添加边的两个列表放在一起,你也可以这样做:

>>> g0.edges() + g1.edges() 
[(1, 2), (2, 3), (3, 4), (1, 2), (2, 3), (3, 4), (5, 6)] 
>>> set(g0.edges() + g1.edges()) 
set([(1, 2), (3, 4), (5, 6), (2, 3)]) 
+0

让我解释一下我的困境,我有这样的 列表= [1.1,1.2,1.3,1.4,1.5], [2.1,2.2的列表, 2.3,3.4,2.5], [3.1,3.2,3.3,3.4,3.5], [4.1,4.2,4.3,4.4,4.5], [5.1,5.2,5.3,5.4,5.5]] 并且如果我想创建边缘,如1.1 - 1.2 - 1.3 .. 2.1 - 2.2 - ..等等 什么是使用现有列表的最好方法。 –

+0

请编辑一个较小且完整的示例 - 包含您想要的每一条边 - 进入您的主要问题。我无法从你的例子中得知1.5是否有优势。 – DSM

+0

我已经发布了这个链接的问题。谢谢很多帮助:) http://stackoverflow.com/questions/12143178/list-conversion –

0

通常的图形数据存储在一个文件,这使得它很容易与熊猫据帧阅读。例如,考虑构建一个seventh grader network的图。我们可以初始化我们的图形如下:

import pandas as pd 
import networkx as nx 

#read the edge list 
edges = pd.read_csv('./data/moreno_seventh/out.moreno_seventh_seventh', skiprows=2, sep = " ", header=None) 
edges.columns = ['student1', 'student2', 'count'] 

#read node metadata 
meta =pd.read_csv('./data/moreno_seventh/ent.moreno_seventh_seventh.student.gender', header=None) 
meta.index += 1 
meta.columns = ['gender'] 

#construct the graph 
G = nx.DiGraph() 
for row in edges.iterrows(): 
    G.add_edge(row[1]['student1'], row[1]['student2'], count=row[1]['count']) 

#add meta data 
for i in G.nodes(): 
    G.node[i]['gender'] = meta.ix[i]['gender']