Python 3 有向加权图到单一关系向量
Python 3 Directed Weighted Graph to Single Relationship Vectors
我是 python 3 的新手,为了进一步处理,我目前必须将存储为矩阵的有向加权图(例如 A->B 权重 20,B -> A 权重 10)转换为单一关系语句,如 [A,B,20] (node, node, weight).
矩阵如下所示:
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 中,我会将它们读入我的程序。我能想到的解决方案是遍历每一行,然后将所有这些语句写在一些讨厌的嵌套中,然后一团糟。
谢谢,
MX
只需为行创建一个循环,为列创建另一个循环:
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]]
以 f 打开(文件名):
reader = csv.DictReader(f, skipinitialspace=True)
名字 = reader.fieldnames
向量 = []
对于 reader 中的行:
fm = 行[姓名[0]]
对于名称[1:]:
w = int(行[到])
如果 w:
vecs.append([fm, to, w])
打印(vecs)
我是 python 3 的新手,为了进一步处理,我目前必须将存储为矩阵的有向加权图(例如 A->B 权重 20,B -> A 权重 10)转换为单一关系语句,如 [A,B,20] (node, node, weight).
矩阵如下所示:
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 中,我会将它们读入我的程序。我能想到的解决方案是遍历每一行,然后将所有这些语句写在一些讨厌的嵌套中,然后一团糟。
谢谢, MX
只需为行创建一个循环,为列创建另一个循环:
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]]
以 f 打开(文件名): reader = csv.DictReader(f, skipinitialspace=True) 名字 = reader.fieldnames 向量 = [] 对于 reader 中的行: fm = 行[姓名[0]] 对于名称[1:]: w = int(行[到]) 如果 w: vecs.append([fm, to, w])
打印(vecs)