繁体   English   中英

我应该如何创建我的对象,使其与networkx很好地兼容?

[英]How should I create my object so it works with networkx pretty well?

我正在尝试设计一个项目,该项目需要全球定位数据,例如城市和州名以及纬度和位置。 我还将在每两座城市之间保持距离。 我想用所有这些信息制作一个图,并对其进行操作以执行一些图算法。 我决定要使用包含每个位置数据的城市对象。 现在我应该有一个散列函数来区分对象吗? 我应该如何处理结合节点并去除边的图算法?

def minCut(self):
    """Returns the lowest-cost set of edges that will disconnect a graph"""

    smcut = (float('infinity'), None)
    cities = self.__selectedcities[:]
    edges = self.__selectededges[:]
    g = self.__makeGRAPH(cities, edges)
    if not nx.is_connected(g):
        print("The graph is already diconnected!")
        return
    while len(g.nodes()) >1:
        stphasecut = self.mincutphase(g)
        if stphasecut[2] < smcut:
            smcut = (stphasecut[2], None) 
        self.__merge(g, stphasecut[0], stphasecut[1])
    print("Weight of the min-cut:  "+str(smcut[1]))

情况真的很糟。 我正在重写原始程序,但这是我从以前的版本中采用的方法。

根据所安装的networkx版本,可以使用min_cut的内置实现。

我安装了1.0RC1软件包,但该软件包不可用。但是我升级到1.4,并且有min_cut。

这是一个(愚蠢的)示例:

import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(['London', 'Boston', 'NY', 'Dallas'])
g.add_edge('NY', 'Boston', capacity)
g.add_edge('Dallas', 'Boston')
g.add_edge('Dallas', 'London')
# add capacity to existing edge
g.edge['Dallas']['London']['capacity'] = 2
# create edge with capacity attribute
g.add_edge('NY', 'London', capacity=3)
print nx.min_cut(g, 'NY', 'London')

您无需为城市对象创建哈希函数,您可以将城市对象直接传递给Networkx-从教程“节点可以是任何可哈希对象,例如文本字符串,图像,XML对象,另一个图,定制的节点对象等。”

您可以遍历城市列表并将其添加为节点,然后遍历距离信息以绘制图表。

您看过教程了吗? http://networkx.lanl.gov/tutorial/tutorial.html

合并节点时,您可以创建新节点并将这些新节点散列到已合并的城市列表中。 例如,在上面的代码中,您可以命名新节点len(g)并将其哈希化为stphasecut [0] + stphasecut [1]#假定stphasecut [1]和[2]是列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM