【问题标题】:Python 3 Directed Weighted Graph to Single Relationship VectorsPython 3 有向加权图到单个关系向量
【发布时间】:2016-03-17 15:41:13
【问题描述】:

我是 python 3 的新手,为了进一步处理,我目前必须将存储为矩阵的有向加权图(例如 A->B 权重 20,B -> A 权重 10)转换为单个关系语句,如 [A ,B,20](节点、节点、权重)。

矩阵如下所示:

matrix     A     B     C
A          0    10     0
B         20     0     5
C         10     5     0

我想要得到的结果如下:

[A, B, 10], [B, A, 20], [B, C, 5], [C, A, 10], [C, B, 5]

在 python 中有一个简单的解决方案吗?也许有一些图书馆可以提供帮助。

数据位于 .csv 中,我会将它们读入我的程序。我能想到的解决方案就是遍历每一行并将所有这些语句写在一些令人讨厌的嵌套 while 和 for mess 中。

谢谢, mx

【问题讨论】:

    标签: python python-3.x networking graph weighted


    【解决方案1】:

    只需为行创建一个循环,为列创建另一个循环:

     table = [[0  ,  10   ,  0],[20 ,    0  ,   5],[10  ,   5   ,  0]]
    
     r = []
     l = ['A','B','C']
     for i in range(len(['A','B','C'])):
         for j in range(len(['A','B','C'])):
             if i!=j:
                 r.append([l[i],l[j],table[i][j]])
     print(r)
    

    ,结果是这样的:

     [['A', 'B', 10], ['A', 'C', 0], ['B', 'A', 20], ['B', 'C', 5], ['C', 'A', 10], ['C', 'B', 5]]
    

    【讨论】:

      【解决方案2】:

      打开(文件名)为 f: reader = csv.DictReader(f, skipinitialspace=True) 名称 = reader.fieldnames vecs = [] 对于阅读器中的行: fm = 行[名称[0]] 对于名称[1:]: w = int(行[到]) 如果 w: vecs.append([fm, to, w])

      打印(向量)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多