邻接矩阵的标签矩阵

时间:2014-10-21 12:36:03

标签: python arrays numpy matrix adjacency-matrix

只是想知道是否有现成的功能来执行以下操作;给定矩阵X,在每个条目中保持标签(可以假设为整数0到N),例如:

X = [[0 1 1 2 2 3 3 3],
     [0 1 1 2 2 3 3 4],
     [0 1 5 5 5 5 3 4]]

我想要它的邻接矩阵G,即如果i,j在X中相邻,则为G [i,j] = 1,否则为0。

例如G [1,2] = 1,因为1,2在(X [0,2],X [0,3]),(X [1,2],X [1,3]中相邻])等。

天真的解决方案是遍历所有条目并检查其邻居,但出于性能原因,我宁愿避免循环。

1 个答案:

答案 0 :(得分:3)

您可以使用花式索引直接从G数组中分配X的值:

import numpy as np

X = np.array([[0,1,1,2,2,3,3,3],
              [0,1,1,2,2,3,3,4],
              [0,1,5,5,5,5,3,4]])
G = np.zeros([X.max() + 1]*2)

# left-right pairs
G[X[:, :-1], X[:, 1:]] = 1
# right-left pairs
G[X[:, 1:], X[:, :-1]] = 1
# top-bottom pairs
G[X[:-1, :], X[1:, :]] = 1
# bottom-top pairs
G[X[1:, :], X[:-1, :]] = 1

print(G)
#array([[ 1.,  1.,  0.,  0.,  0.,  0.],
#       [ 1.,  1.,  1.,  0.,  0.,  1.],
#       [ 0.,  1.,  1.,  1.,  0.,  1.],
#       [ 0.,  0.,  1.,  1.,  1.,  1.],
#       [ 0.,  0.,  0.,  1.,  1.,  0.],
#       [ 0.,  1.,  1.,  1.,  0.,  1.]])
相关问题