我正在尝试创建
[[ 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]
答案 0 :(得分:3)
我猜你想要什么......你的变量名很差。我不知道负值来自何处(它是有向图吗?从未使用过关系矩阵),但我从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.DiGraph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
incidence_matrix = -nx.incidence_matrix(G, oriented=True) # 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.]]
答案 1 :(得分:0)
这只是一种与您的版本不同的替代方法,但您可以将其用作灵感。我相信你应该阅读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]]
请注意,我正在操作行,而不是列,因为我怀疑你在做什么。 通过使“edge”中的值+/-插入'-1'并使用if - ,elif +,否则如果要实现此版本则传递。
在Python3中 xrange
必须更改为range