我想从我从network-x的Floyd-Marshall算法获得的字典中打印邻接矩阵。我该怎么做?我想出了这本来看看字典:
X = nx.floyd_warshall(gra)
Y = {a: dict(b) for a, b in X.items()}
print(Y)
它返回此:
{(0, 0): {(0, 0): 0, (1, 0): 1, (0, 1): 1, (1, 1): 2, (0, 2): 2, (1, 2): 3}, (1, 0): {(1, 0): 0, (0, 0): 1, (1, 1): 1, (0, 1): 2, (0, 2): 3, (1, 2): 2}, (0, 1): {(0, 1): 0, (0, 0): 1, (1, 1): 1, (0, 2): 1, (1, 0): 2, (1, 2): 2}, (1, 1): {(1, 1): 0, (1, 0): 1, (0, 1): 1, (1, 2): 1, (0, 0): 2, (0, 2): 2}, (0, 2): {(0, 2): 0, (0, 1): 1, (1, 2): 1, (0, 0): 2, (1, 0): 3, (1, 1): 2}, (1, 2): {(1, 2): 0, (1, 1): 1, (0, 2): 1, (0, 0): 3, (1, 0): 2, (0, 1): 2}}
是否可以存储在变量中,然后打印邻接矩阵?
样本输出:
(0,0) (0,1) (1,0) ...
(0,0) 0 1 2 1 ...
(0,1) 1 0 1
...
(1, 2) 7 6 ...
谢谢
一个非常简单的想法是打印作为键的标题行,然后使用标题键为每对键/映射打印值,以确保顺序良好
keys = vals.keys()
print(" ", *keys)
for k, v in vals.items():
print(k, ("{:^7}" * len(keys)).format(*(v[k] for k in keys)))
(0, 0) (1, 0) (0, 1) (1, 1) (0, 2) (1, 2)
(0, 0) 0 1 1 2 2 3
(1, 0) 1 0 2 1 3 2
(0, 1) 1 2 0 1 1 2
(1, 1) 2 1 1 0 2 1
(0, 2) 2 3 1 2 0 1
(1, 2) 3 2 2 1 1 0
不仅可以将其打印出来,还可以将其转换为可以操纵的数据框。
import pandas as pd
a = {(0, 0): {(0, 0): 0, (1, 0): 1, (0, 1): 1, (1, 1): 2, (0, 2): 2, (1, 2): 3}, (1, 0): {(1, 0): 0, (0, 0): 1, (1, 1): 1, (0, 1): 2, (0, 2): 3, (1, 2): 2}, (0, 1): {(0, 1): 0, (0, 0): 1, (1, 1): 1, (0, 2): 1, (1, 0): 2, (1, 2): 2}, (1, 1): {(1, 1): 0, (1, 0): 1, (0, 1): 1, (1, 2): 1, (0, 0): 2, (0, 2): 2}, (0, 2): {(0, 2): 0, (0, 1): 1, (1, 2): 1, (0, 0): 2, (1, 0): 3, (1, 1): 2}, (1, 2): {(1, 2): 0, (1, 1): 1, (0, 2): 1, (0, 0): 3, (1, 0): 2, (0, 1): 2}}
df = pd.DataFrame(a)
print(df)
输出:
0 1 0 1 0 1
0 0 1 1 2 2
0 0 0 1 1 2 2 3
1 0 1 0 2 1 3 2
0 1 1 2 0 1 1 2
1 1 2 1 1 0 2 1
0 2 2 3 1 2 0 1
1 2 3 2 2 1 1 0