繁体   English   中英

将邻接矩阵转换为边数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM