我有一个多图形对象,并希望将其转换为具有加权边的简单图形对象。我查看了networkx文档,似乎无法找到实现此功能的内置函数。我只是想知道是否有人知道networkx中的内置函数可以实现这个目标。我查看了to_directed(),to_undirected()函数,但它们不符合我的目标。Networkx:将多幅图转换为具有加权边的简单图形
10
A
回答
14
这里是由权重相加,以创建加权多图加权图的一种方法:
import networkx as nx
# weighted MultiGraph
M = nx.MultiGraph()
M.add_edge(1,2,weight=7)
M.add_edge(1,2,weight=19)
M.add_edge(2,3,weight=42)
# create weighted graph from M
G = nx.Graph()
for u,v,data in M.edges(data=True):
w = data['weight'] if 'weight' in data else 1.0
if G.has_edge(u,v):
G[u][v]['weight'] += w
else:
G.add_edge(u, v, weight=w)
print(G.edges(data=True))
# [(1, 2, {'weight': 26}), (2, 3, {'weight': 42})]
+0
这是一个很好的解决方案,几乎正是我所期待的,除了我的MultiGraph在边缘没有“重量”属性。我建议对你的代码进行小小的更新,所以如果没有这样的属性,它将权重默认为1.0。 – 2017-02-13 13:33:49
-3
您可以使用igraph库。从这里下载python扩展模块: http://igraph.sourceforge.net/download.html
10
这样做的一个非常简单的方法就是将多个图作为输入传递给Graph
。
import networkx as nx
G = nx.MultiGraph()
G.add_nodes_from([1,2,3])
G.add_edges_from([(1, 2), (1, 2), (1, 3), (2, 3), (2, 3)])
G2 = nx.Graph(G)
这将创建多图的无向图,其中多条边合并为单条边。但是,如果您对合并边缘有不同的属性,我不知道是否有任何方法来确定保留哪个属性。
+0
知道MultiGraph可以很容易地转换成图形是非常有用的,但它不能解决OP对加权边缘的要求。 – TheEspinosa 2017-07-19 15:07:31
相关问题
- 1. 将位图转换为多边形
- 2. 将具有孔的多边形转换为无孔的多个简单多边形
- 3. 将多边形转换为多边形
- 4. 如何将多点图转换为Networkx中的无定向图?
- 5. NetworkX:翻转图形
- 6. 有没有简单的方法将autocad多边形转换为adobe swf格式?
- 7. NetworkX DiGraph()以图形()的边缘权重不加总和,如何加权?
- 8. 将多边形转换为三角形
- 9. 带有加权边的图形绘制
- 10. 将简单多边形的轮廓样条轮廓线转换成简单的多边形
- 11. NetworkX转换多重图以简单图表通过平均平行长度
- 12. NetworkX:将边缘添加到节点属性的图形中
- 13. 将简单图像转换为灰度
- 14. 如何将一组多边形转换为位图
- 15. OpenCv将圆圈转换为多边形
- 16. 将多边形转换为网格
- 17. 将像素转换为多边形
- 18. networkx:具有一致节点放置的多个图形
- 19. 如何有效地将“terrain”numpy数组转换为networkx图?
- 20. 将栅格转换为多边形时不需要的子几何图形
- 21. Networkx图形边缘绘制错误
- 22. 将图像转换为图形在c#
- 23. 如何将自相交多边形划分为简单的多边形?
- 24. 将图像添加到多边形
- 25. 将方形图像转换为矩形
- 26. 如何将多图解简化为简单有向图
- 27. 图形转换为位图
- 28. 从KML/JSON/VARIOUS mapit源到Lat/Long多边形的地图/多边形转换?
- 29. networkx - 将图转储成JSON,重量为
- 30. 如何将base64_encode png图像转换为简单图像
是否有多重图加权边缘?如果是这样,你是否想要以某种方式组合来自并行边的权重来构建图? – Aric 2013-03-23 23:41:43
是的,就是这样的情况。 – anonuser0428 2013-03-23 23:56:39