Как создать матрицу инцидентов

Я пытаюсь создать

[[ 1, 1, 1, 0, 0, 0, 0, 0, 0], [-1, 0, 0, 1, 1, 0, 0, 0, 0], [ 0, -1, 0, -1, 0, 1, 1, 0, 0], [ 0, 0, 0, 0, -1, -1, 0, 1, 0], [ 0, 0, -1, 0, 0, 0, -1, 0, 1], [ 0, 0, 0, 0, 0, 0, 0, -1, -1]] S=[1, 2, 3, 4, 5, 6] D=[[1, 2], [1, 3], [1, 5], [2, 3], [2, 4], [3, 4], [3, 5], [4, 6], [5, 6]] INC = [[0]*len(D) for _ in range(len(S))] for i in range(len(D)): 

после этого я делаю что-то неправильно, где я просто получаю матрицу нулей

  for j in S: if i == j: INC.append(1) 

Я пробовал использовать D в двух разных списках, и он начал усложняться для меня

 my_list1 = [i[0] for i in D] my_list2 = [i[1] for i in D] 

2 Solutions collect form web for “Как создать матрицу инцидентов”

Мое лучшее предположение о том, что вы хотите … ваши имена переменных довольно бедны. Я не знаю, откуда берутся отрицательные значения (это ориентированный граф? Никогда не использовал матрицу инцидентов), но я бы начал с NetworkX ( networkx ) .

 import networkx as nx nodes = [1, 2, 3, 4, 5, 6] edges = [[1, 2], [1, 3], [1, 5], [2, 3], [2, 4], [3, 4], [3, 5], [4, 6], [5, 6]] G = nx.Graph() G.add_nodes_from(nodes) G.add_edges_from(edges) incidence_matrix = nx.incidence_matrix(G) # this returns a scipy sparse matrix print(incidence_matrix.toarray()) 

Вывод:

 [[ 1. 1. 1. 0. 0. 0. 0. 0. 0.] [ 1. 0. 0. 1. 1. 0. 0. 0. 0.] [ 0. 1. 0. 1. 0. 1. 1. 0. 0.] [ 0. 0. 0. 0. 1. 1. 0. 1. 0.] [ 0. 0. 1. 0. 0. 0. 1. 0. 1.] [ 0. 0. 0. 0. 0. 0. 0. 1. 1.]] 

Это просто альтернативный подход, который отличается от вашей версии, но вы можете использовать его как вдохновение. Я считаю, вы должны прочитать о append .

Во всяком случае … Это мой взгляд на вашу матрицу заболеваемости:

 rows = 6 cols = 9 ones = [[0,1,2], [0,4,5], [1,3,5,6], [4,5,7], [3,6,8], [7, 8]] INC = [ [ 0 for i in xrange(cols) ] for j in xrange(rows) ] for i,row in enumerate(ones): for col in row: INC[i][col] = 1 [[1, 1, 1, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 1, 1, 0, 0, 0], [0, 1, 0, 1, 0, 1, 1, 0, 0], [0, 0, 0, 0, 1, 1, 0, 1, 0], [0, 0, 0, 1, 0, 0, 1, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1]] 

Обратите внимание, что я работаю на строках, а не на столбцах, как я подозреваю, вы делаете. Вставьте '-1', сделав значения в "edge" +/- и используйте if,, elif +, else pass, если вы хотите реализовать эту версию.

В Python3 xrange необходимо изменить на range

Python - лучший язык программирования в мире.