如何从Python中的邻接列表中选择子矩阵?

时间:2014-02-17 16:05:21

标签: python numpy matrix graph

我有一个邻接列表,其中每个数组代表该行的非零列(例如,下面的adj。列表中的第0个数组表示第2列和第6列为1,其他所有内容均为0)。

  

adj_list = [[2,6],[1,3,24],[2,4],[3,5,21],[4,6,10],[1,5],   7],[6,8,9],[7],[7,10,14],[5,9,11],[10,12,18],[11,13],   [12,14,15],[9,13],[13,16,17],[15],[15],[11,19,20],[18],   [18],[4,22,23],[21],[21],[2,25,26],[24],[24]]

鉴于此调整。 list,我想选择一个子矩阵,它具有相同的行和列索引,由下式给出:

submatrix = (0, 1, 2, 5, 22)

子矩阵中的每个元素表示行号。

1)对于子矩阵中的每一行i,我需要从ith获取adj_list数组(相当于从邻接矩阵中获取ith行)< / p>

2)然后从该数组中,我需要提取与子矩阵匹配的项目

例如,如果我正在查看submatrix中的第3个元素,即5,那么我需要转到adj_list中的第5个数组(相当于获得adj.matrix的第5行),这是[ 1,5,7],然后我需要查看[1,5,7]中哪些元素与子矩阵匹配(相当于获得第5行的第1,第5和第7列)。在这种情况下,第5行的结果应为[0,1,0,1,0],因为在两个数组中只有1和5相交。)

如何在给定adj的情况下有效地选择该子矩阵。列出?

1 个答案:

答案 0 :(得分:2)

adj_list = [[2, 6], [1, 3, 24], [2, 4], [3, 5, 21], [4, 6, 10], [1, 5, 7], [6, 8, 9], [7], [7, 10, 14], [5, 9, 11], [10, 12, 18], [11, 13], [12, 14, 15], [9, 13], [13, 16, 17], [15], [15], [11, 19, 20], [18], [18], [4, 22, 23], [21], [21], [2, 25, 26], [24], [24]]

submatrix = (0, 1, 2, 5, 22)

result = [[i in adj_list[sm] for i in submatrix] for sm in submatrix]

应该这样做;虽然我怀疑如果你更仔细地考虑你的最终目标,你可能更愿意计算除此之外的东西。