Как отсортировать узлы по аргументу? - PullRequest
0 голосов
/ 04 июня 2019

Я напишу пример, чтобы уточнить, что я имею в виду:

test = nx.Graph()
test.add_edge(0,3)
test.add_edge(1,2)
test.nodes 
Out: NodeView((0, 3, 1, 2))
nx.to_numpy_matrix(test)
Out: matrix([[0., 1., 0., 0.],
            [1., 0., 0., 0.],
            [0., 0., 0., 1.],
            [0., 0., 1., 0.]])

Таким образом, если вы посмотрите на приведенный выше пример, вы увидите, что networkx упорядочивает узлы в том порядке, в котором вы добавляете их в график.

Проблема в том, что мне нужно, чтобы моя матрица смежности упорядочивалась по номеру, заданному для узла. Итак, для моего примера, окончательная матрица должна быть:

Out: matrix([[0., 0., 0., 1.],
            [0., 0., 1., 0.],
            [0., 1., 0., 0.],
            [1., 0., 0., 0.]])

Более того, я читаю график из файла, представляющего собой список ребер.

В конце концов, моя реальная проблема заключается в том, что индексы выходной матрицы отличаются от индексов на графике. Так что для моего примера, если я хочу проверить узел 1 в матрице, я должен написать матрицу [2], поскольку это третий узел, который я записываю в списке ребер. Кто-нибудь знает, как я могу это исправить?

1 Ответ

1 голос
/ 04 июня 2019

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

>>> G = nx.Graph()
>>> G.add_node(0)
>>> G.add_node(1)
>>> G.add_node(2)
>>> G.add_node(3)
>>> G.add_edge(0,3)
>>> G.add_edge(1,2)
>>> G.nodes
NodeView((0, 1, 2, 3))
>>> nx.to_numpy_matrix(G)
matrix([[0., 0., 0., 1.],
        [0., 0., 1., 0.],
        [0., 1., 0., 0.],
        [1., 0., 0., 0.]])

Или, глядя на документацию по API, вы можете просто сделать,

print(nx.to_numpy_matrix(test, nodelist=[0,1,2,3]))

Выход:

[[0. 0. 0. 1.]
 [0. 0. 1. 0.]
 [0. 1. 0. 0.]
 [1. 0. 0. 0.]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...