【问题标题】:Converting adjacency list to adjacency matrix in python在python中将邻接列表转换为邻接矩阵
【发布时间】:2020-05-14 10:41:12
【问题描述】:

尝试编写代码将图形表示从邻接列表转换为邻接矩阵。

该函数应输入邻接表adj_list = [[1,2],[2],[],[0,1]]并输出二进制矩阵

adj_mat = [0. 1. 1. 0]
          [0. 0. 1. 0.]
          [0. 0. 0. 0.]
          [1. 1. 0. 0.] 

但是运行代码

 def adj_list_to_matrix(adj_list):
    n = len(adj_list)
    adj_matrix = np.nan * np.ones((n,n))
    np.fill_diagonal(adj_matrix,0)

    for i in range(n):
        for j, w in adj_list[i]:
            adj_matrix[i,j] = w
    return adj_matrix

产生错误信息

for j, w in adj_list[i]:
TypeError: cannot unpack non-iterable int object 

谁能帮助解决这个问题以获得有效的代码?

【问题讨论】:

    标签: python function adjacency-matrix adjacency-list


    【解决方案1】:

    for j, w in adj_list[i]: 不起作用,因为adj_list[i] 只是一个列表,因此您只能在 for 循环中解压缩一个值。看起来您希望 w 成为权重因子,但您的邻接列表没有任何权重。

    你可以这样做,假设所有的权重都是 1(我认为这是你想要的,基于你在问题中的预期输出)。

    def adj_list_to_matrix(adj_list):
        n = len(adj_list)
        adj_matrix = np.nan * np.ones((n,n))
        np.fill_diagonal(adj_matrix,0)
    
        for i in range(n):
            for j in adj_list[i]:
                adj_matrix[i,j] = 1
        return adj_matrix
    

    输出

    [[ 0.,  1.,  1., nan],
     [nan,  0.,  1., nan],
     [nan, nan,  0., nan],
     [ 1.,  1., nan,  0.]])
    

    加权邻接矩阵

    如果你想要一个加权邻接矩阵,你需要将权重放在adj_list 中,如下所示:

    adj_list = [{1:0.2,2:0.5},{2:1},{},{0:0.1,1:0.6}]
    

    那么您的代码只需稍作调整即可工作

    def adj_list_to_matrix(adj_list):
        n = len(adj_list)
        adj_matrix = np.nan * np.ones((n,n))
        np.fill_diagonal(adj_matrix,0)
    
        for i in range(n):
            for j, w in adj_list[i].items():
                adj_matrix[i,j] = w
        return adj_matrix
    

    输出

    [[0. , 0.2, 0.5, nan],
     [nan, 0. , 1. , nan],
     [nan, nan, 0. , nan],
     [0.1, 0.6, nan, 0. ]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多