[英]Convert adjacency matrix to array of edges
我希望能够将邻接矩阵转换为边数组。 目前我只知道如何将边数组转换为邻接矩阵:
E = [[0, 0], [0, 1], [1, 1], [2, 0]]
size = len(set([n for e in E for n in e]))
adjacency_matrix = [[0] * size for _ in range(size)]
for sink, source in E:
adjacency_matrix[sink][source] = 1
>> print(adjacency_matrix)
[[1, 1, 0], [0, 1, 0], [1, 0, 0]]
但是否有可能扭转这一进程?
如果您需要纯 python,请使用列表理解:
adjacency_matrix = [[1, 1, 0], [0, 1, 0], [1, 0, 0]]
E = [[i,j] for i,l in enumerate(adjacency_matrix) for j, x in enumerate(l) if x]
output: [[0, 0], [0, 1], [1, 1], [2, 0]]
尝试这个
E = np.stack(np.where(adjacency_matrix)).T
添加tolist()
如果你想要一个列表
Output (带tolist())
[[0, 0], [0, 1], [1, 1], [2, 0]]
编辑:不好,我认为 OP 使用的是numpy
,所以这里是 numpy
是的,这既可能又简单,只需使用两个嵌套循环遍历矩阵即可,例如:
adjacency_matrix = [[1, 1, 0], [0, 1, 0], [1, 0, 0]]
E = []
for i in range(size):
for j in range(size):
if adjacency_matrix[i][j] == 1:
E.append([i, j])
print(E)
Output:
[[0, 0], [0, 1], [1, 1], [2, 0]]
你可以为它制作一个 function:
def adj_to_edges(A):
edges = []
for i,row in enumerate(A):
for j,b in enumerate(row):
if b == 1:
edges.append([i,j])
return edges
print(adj_to_edges([[1, 1, 0], [0, 1, 0], [1, 0, 0]]))
#[[0, 0], [0, 1], [1, 1], [2, 0]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.