2017-11-09 2 views
0

파이썬 그래프 (하지만 큰 파일)을 생성하기 위해 파일을 파싱 :이 같은 형식의 파일이

13 16 1 
11 17 1 
8 18 -1 
11 19 1 
11 20 -1 
11 21 1 
11 22 1 

첫번째 열이 시작 정점이다 번째 열은 종료 정점은 세 번째는 시작과 끝 사이의 가중치입니다.

나는 networkx하지만 메신저이 오류가와 그래프를 만들려고 : 당신은 networkx의 read_edgelist 명령을 사용한다

import networkx as nx 

file = open("network.txt","r") 
lines = file.readlines() 
start_vertex = [] 
end_vertex = [] 
sign = [] 

for x in lines: 
    start_vertex.append(x.split('\t')[0]) 
    end_vertex.append(x.split('\t')[1]) 
    sign.append(x.split('\t')[2]) 
file.close() 

G = nx.Graph() 

for i in lines: 
    G.add_nodes_from(start_vertex) 
    G.add_nodes_from(end_vertex) 
    G.add_edges_from([start_vertex, end_vertex, sign]) 

답변

2

:

"Edge tuple %s must be a 2-tuple or 3-tuple." % (e,)) 

것은 여기 내 코드입니다. 이것은 당신이 당신의 입력 파일에 사용했던 어떤 것으로 보인다 때문에 내가 사용 구분 기호는 두 개의 공간이다

G=nx.read_edgelist('network.txt', delimiter = ' ', nodetype = int, data = (('weight', int),)) 

사항.


당신은 당신의 코드에 충실하려면

:

먼저, for i in lines 제거.

오류의 원인은 두 가지입니다. 먼저 G.add_edges_from 대신 G.add_weighted_edges_from을 사용하려고합니다.

또한이 항목의 형식이 (u, v, weight) 인 목록 (또는 유사한 개체)이 필요합니다. 예를 들어 G.add_weighted_edges_from([(13,16,1), (11,17,1)])은 처음 두 가장자리를 추가합니다. 이 명령은 G.add_weighted_edges_from([[13,11,8,11,...],[16,17,18,19,...],[1,1,-1,1,...]) 명령을보고 [13,11,8,11,...]은 첫 번째 가장자리에 대한 정보 여야한다고 생각하고 [16,17,18,19,...]은 두 번째 가장자리이고 [1,1,-1,1,...]은 세 번째 가장자리입니다. 그것은 할 수 없습니다.

G.add_weighted_edges_from(zip(start_vertex,end_vertex,sign)) 할 수 있습니다. zip의 설명을 참조하십시오 https://stackoverflow.com/a/13704903/2966723


마지막으로, G.add_nodes_from(start_vertex)G.add_nodes_from(end_vertex) 불필요한 있습니다. networkx가 edge를 추가하려 할 때 노드가 이미 존재하지 않는다면 노드도 추가됩니다.

1

파이썬의 networkx 라이브러리를 사용합니다. (필자는 파이썬 3.6을 사용한다고 가정합니다).

다음 코드는 귀하의 파일을있는 그대로 읽습니다. 위에서 작성한 라인은 필요하지 않습니다.
내가 작성한 인쇄 명령은 읽은 그래프가 올바른지 확인하는 데 도움이됩니다.

참고 : 그래프가 유향 그래프가 아닌 경우 함수에 기입 된 create_using=nx.DiGraph() 부분을 제거 할 수 있습니다.

 
import networkx as nx 
g = nx.read_edgelist('network.txt', nodetype=int, data=(('weight', int),), create_using=nx.DiGraph(),delimiter=' ') 
print(nx.info(g)) 
관련 문제