ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

我自己的对象使用networkx

2019-12-09 01:59:01  阅读:266  来源: 互联网

标签:networkx graph-theory python


意大利辣香肠说,我有自己的东西.我从每个意大利辣香肠都有一个边缘列表和一个意大利辣香肠列表.然后,我使用networkx构建图形.我正在尝试查找从一种意大利辣香肠到另一种意大利辣香肠的最短路径的重量.但是,出现如下错误,该错误跟踪来自networkx的内部事件,如下所示:

Traceback (most recent call last):


File "<stdin>", line 1, in <module>
  File "pizza.py", line 437, in shortestPath
    cost = nx.shortest_path_length(a, spepp, tpepp, True)
  File "/Library/Python/2.6/site-packages/networkx-1.3-py2.6.egg/networkx/algorithms/shortest_paths/generic.py", line 181, in shortest_path_length
    paths=nx.dijkstra_path_length(G,source,target)
  File "/Library/Python/2.6/site-packages/networkx-1.3-py2.6.egg/networkx/algorithms/shortest_paths/weighted.py", line 119, in dijkstra_path_length
    (length,path)=single_source_dijkstra(G,source, weight = weight)
  File "/Library/Python/2.6/site-packages/networkx-1.3-py2.6.egg/networkx/algorithms/shortest_paths/weighted.py", line 424, in single_source_dijkstra
    edata=iter(G[v].items())
  File "/Library/Python/2.6/site-packages/networkx-1.3-py2.6.egg/networkx/classes/graph.py", line 323, in __getitem__
    return self.adj[n]
KeyError: <pizza.pepperoni object at 0x100ea2810>

关于什么是错误,或者为了不得到此KeyError我必须添加到我的披萨类中的任何想法吗?

编辑:我的边缘格式正确.我不知道这些对象是否可以作为节点来处理.

解决方法:

如果边和节点各作为一个列表,那么在networkx中构建图形就很简单.鉴于您的问题是在构建图形对象时发生的,也许最好的诊断方法是逐步在networkx中进行图形构建:

import networkx as NX
import string
import random

G = NX.Graph()    # initialize the graph

# just generate some synthetic data for the nodes and edges:
my_nodes = [ ch for ch in string.ascii_uppercase ]
my_nodes2 = list(my_nodes)
random.shuffle(my_nodes2)
my_edges = [ t for t in zip(my_nodes, my_nodes2) if not t[0]==t[1] ]

# now add the edges and nodes to the networkx graph object:
G.add_nodes_from(my_nodes)
G.add_edges_from(my_edges)

# look at the graph's properties:
In [87]: len(G.nodes())
Out[87]: 26

In [88]: len(G.edges())
Out[88]: 25

In [89]: G.edges()[:5]
Out[89]: [('A', 'O'), ('A', 'W'), ('C', 'U'), ('C', 'F'), ('B', 'L')]

# likewise, shortest path calculation is straightforward
In [86]: NX.shortest_path(G, source='A', target='D', weighted=False)
Out[86]: ['A', 'W', 'R', 'D']

以我的经验,Networkx具有一个非常宽松的接口,尤其是它将接受广泛的对象类型作为节点和边.节点可以是除无之外的任何可哈希对象.

我唯一想到的可能会导致您在Q中出现的错误是,也许在创建图表之后,您直接操作了图形对象(dict,* G *),您不应该这样做-大量的访问器方法.

标签:networkx,graph-theory,python
来源: https://codeday.me/bug/20191209/2095461.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有