【问题标题】:Matrix transpose without numpy, error: list index out of range [duplicate]没有numpy的矩阵转置,错误:列表索引超出范围[重复]
【发布时间】:2019-02-19 20:54:34
【问题描述】:

我想做一个矩阵的转置。我不想使用 numpy。我收到以下错误(以下代码)。任何帮助表示赞赏

    matrix = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]

    transposed = []

    for i in range(7):
        new=[]
        for row in matrix:
            new.append(row[i])
        transposed.append(lst)
    print(transposed)

错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-106-856d3ec27942> in <module>()
      6     new=[]
      7     for row in matrix:
----> 8         new.append(row[i])
      9     transposed.append(lst)
     10 print(transposed)

IndexError: list index out of range

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您可以使用zip*unpacking*unpacking 使用一个很酷的单行列*unpacking

    m = [[1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3]]
    list(zip(*m))
    

    输出:

    [(1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)]
    

    【讨论】:

      【解决方案2】:

      简单循环方式:

      matrix = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]  
      
      print([[matrix[j][i] for j in range(len(matrix))] for i in range(len(matrix[0]))])
      # [[1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3]]
      

      zip:

      matrix = [[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
      
      print(list(map(list, zip(*matrix))))
      # [[1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3]]
      

      【讨论】:

        【解决方案3】:

        在您的代码中为 0

        transposed= list(zip(*matrix))
        

        *:将矩阵分解为其元素,即它的行; zip:将行元素分组为元组;

        print(transposed)
        Out: [(1, 1, 1, 1, 1, 1, 1), (2, 2, 2, 2, 2, 2, 2), (3, 3, 3, 3, 3, 3, 3)]
        

        或者您可以将元组转换为列表:

        transposed=[ list(e) for e in zip(*matrix)]
        print(transposed)
        Out: [[1, 1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2, 2], [3, 3, 3, 3, 3, 3, 3]]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-26
          • 2013-04-07
          • 1970-01-01
          • 2017-02-12
          • 2013-03-22
          • 1970-01-01
          相关资源
          最近更新 更多