【问题标题】:Python: In place transpose of a matrixPython:就地转置矩阵
【发布时间】:2018-04-18 13:39:54
【问题描述】:

我尝试编写一个就地转置函数只是为了练习。谁能告诉我这个算法的时间和空间复杂度是多少?

from copy import *

def transpose(matrix):
    reference=deepcopy(matrix)
    col_num=len(reference[0])
    row_num=len(reference)
    matrix.clear()

    new=[list(map(lambda x: x[i],reference)) for i in range(col_num)]
    for i in new:
        matrix.append(new)
    return matrix

    x=[[ 1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
    y=transpose(x)

编辑:使我的就地转置代码更简洁

【问题讨论】:

    标签: python-3.x multidimensional-array


    【解决方案1】:

    选项1:如果是NxN方阵,那么:

    def transpose(matrix):
        # Transpose O(N*N)
        size = len(matrix)
        for i in range(size):
            for j in range(i+1, size):
                matrix[j][i],matrix[i][j] = matrix[i][j],matrix[j][i]
    

    选项 2: 通用的“pytonic”方式是这样做的:

    mat = [[1,2,3],[4,5,6],[7,8,9]]
    transpose = list(zip(*mat))
    transpose
    >>> [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    

    zip function reference

    【讨论】:

      【解决方案2】:

      对于第二个循环,更改为以下内容。 在您的代码中,您将进入一个无限循环。

          for row in matrix: 
              while len(row)!=row_num:
                  if len(row)<row_num:
                      row.append(0)
                  else:
                      row.pop()
      

      【讨论】:

        猜你喜欢
        • 2012-03-02
        • 1970-01-01
        • 2017-05-08
        • 2014-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-23
        • 1970-01-01
        相关资源
        最近更新 更多