У меня есть большой массив данных со списком ребер в двудольном графе. Я хочу преобразовать его в матрицу разреженных переходов python.
Итак, у меня есть фрейм данных со списком ребер, связывающих узлы из части 1 (a, b, c) с частью (x, y, z). Ребра имеют кратность: в этом примере есть два ребра от b до y.
start end multiplicity
a x 1
a y 1
b y 2
b z 1
c x 1
c z 1
В результате я хочу получить разреженную матрицу, в данном случае 3x3. У меня есть словари для частей 1 и 2, указывающие, какому узлу соответствует какая строка и столбцы результирующей матрицы перехода:
dic1 = {'a':0,'b':1,'c':2}
dic2 = {'x':1,'y':0,'z':2}
Поэтому я хочу матрицу
y x z
a 1 1 0
b 2 0 1
c 0 1 1
... но разреженным (csr_matrix, lil_matrix или coo_matrix). Я попытался перебрать список ребер, но он слишком медленный для длинных списков. Кроме того, подходы, основанные на pivot, будут генерировать полные матрицы, которые будут медленными и потребляющими память. Есть ли эффективный способ получить разреженную матрицу, которую я хочу