nx.bipartite.biadjacency_matrix() - отслеживание узлов
Я использую Python 3.6 и Networkx 2.1. Я импортирую двудольный граф из взвешенного списка ребер, а затем вызываю матричную функцию двунаправленности и преобразовываю результат в кадр данных pandas для выполнения некоторых операций над ним, например, для вычисления некоторых коэффициентов корреляции (функции, выполняющие эти вычисления, принимают матрицы смежности в качестве входных данных, следовательно, мне нужно трансформировать свой крайний список)
import pandas as pd
from networkx import bipartite
A=bipartite.biadjacency_matrix(G, nodes1, nodes2).todense()
A=pd.DataFrame(A)
дело в том, что когда я звоню bipartite.biadjacency_matrix()
Я теряю имена узлов, полученный фрейм данных выглядит примерно так:
0 1 2 3 4 5 6 7 8 9 ... 13 14 15 16 17 18 19 \
0 0 0 0 1 0 0 0 0 0 0 ... 0 11 0 2 0 2 1
1 0 0 0 0 0 0 0 0 0 0 ... 1 23 2 0 0 3 5
2 0 0 0 0 0 0 0 0 1 0 ... 3 24 3 5 0 3 5
3 0 0 0 0 0 0 0 0 0 0 ... 0 18 0 2 0 0 1
4 0 0 0 0 0 0 0 0 1 0 ... 1 17 4 8 0 4 2
.
.
.
поэтому после вычисления коэффициентов корреляции я могу построить сеть на основе матриц подобия, которые я получаю, но я не знаю, кто есть кто, кто есть кто. Любое предложение о том, как восстановить имена?
1 ответ
Из документов bipartite.biadjacency_matrix
:
row_order: список узлов. Строки матрицы упорядочены в соответствии со списком узлов.
column_order: list, необязательный. Столбцы матрицы упорядочены в соответствии со списком узлов. Если значение column_order равно None, то порядок столбцов является произвольным.
и из pd.DataFrame
:
index: Индекс или индекс в виде массива, который будет использоваться для результирующего кадра. По умолчанию будет np.arange(n), если нет индексируемой информационной части входных данных и индекс не предоставлен
columns: индексные или массивные метки столбцов для использования в результирующем кадре. По умолчанию будет np.arange(n), если не указаны метки столбцов.
Вы выводите эту матрицу A
строки упорядочены с использованием nodes1
и столбцы, использующие nodes2
, Чтобы получить тот же порядок в вашем фрейме данных просто:
A = pd.DataFrame(A, index=nodes1, columns=nodes2)