распечатать матрицу из словаря - PullRequest
0 голосов
/ 17 июня 2020

Я хотел бы распечатать матрицу смежности из словаря, полученного мной из алгоритма Флойда-Маршалла в network-x. Как мне это сделать? Я придумал это, чтобы увидеть словарь таким, какой он есть:

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     ...

Спасибо

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вместо того, чтобы просто распечатать его, вы можете преобразовать его в фрейм данных, которым вы можете манипулировать.

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
1 голос
/ 17 июня 2020

Довольно простой идеей было бы напечатать строку заголовка, которая является ключами, а затем для каждой пары ключей / сопоставлений распечатать значения, используя ключ заголовка, чтобы убедиться, что вы получите правильный порядок

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  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...