Я пытаюсь создать последовательность на основе матрицы зависимостей в Python.Для этого я пытаюсь использовать матрицу смежности, чтобы я мог создать ориентированный граф, который в основном будет представлять последовательность.Например,
A B C D E
A 0 0 0 0 0
B 1 0 0 0 0
C 0 1 0 0 0
D 1 0 0 0 0
E 0 1 0 1 0
Это будет представлять последовательность ABCDE, поскольку B зависит от A, C зависит от B a и так далее.Я случайно создаю эту матрицу, которая является нижней треугольной матрицей.Проблема, с которой я сталкиваюсь, заключается в том, что когда я случайно создаю матрицу, иногда возникает прямая связь, а также косвенная связь между строкой и столбцом, что является избыточностью.Например, если вышеуказанная матрица была слегка изменена на следующую матрицу,
A B C D E
A 0 0 0 0 0
B 1 0 0 0 0
C 0 1 0 0 0
D 0 0 1 0 0
E 0 1 0 1 0
Избыточность была бы, поскольку E косвенно связан с B через C и также напрямую связан с B.Я хочу удалить прямую связь между E и B. У меня проблемы с этим.Я попытался использовать связующее дерево, но оно не работает, потому что я хочу сохранить ситуацию, представленную в верхней матрице (т. Е. E косвенно зависит от A через B, а также имеет отдельную косвенную зависимость через D, что допустимо), но исправить ситуацию в секундуматрица (то есть E напрямую зависит от B, а также косвенно зависит от B через D).Ниже приведен код, который у меня есть до сих пор.
import numpy as np
import pandas as pd
import csv
n = 20
k = 0
rowNum = 5
colNum = 4
numValue = ((rowNum+1)/2)*colNum
m = (np.random.rand(n, n) * 2).astype(np.int)
matrix = np.tril(m, -1)
for (i,j), value in np.ndenumerate(matrix):
for k in np.arange(0,len(matrix[i]), 1):
if (matrix[i][j] == 1 and matrix[j][k] == 1):
matrix[i][k] = 0
else: continue
if (i-j > colNum and i-j < numValue) or (i-j > (numValue+colNum)):
matrix[i][j] = 0
else:
continue
if i <= j:
continue
else:
if np.sum(matrix[i] == 1) >= 4:
matrix[i][j] = 0
else:continue
names = [i for i in 'ABCDEFGHIJKLMNOPQRST']
df = pd.DataFrame(matrix, index=names, columns=names)
df.to_csv('df.csv', index=True, header=True, sep=',')
Как включить это условие в код?Или мне нужен совершенно другой подход?