2015-12-05 17 views
0

鉴于矩阵移调使用循环

matrix = [[2, None], 
     [2, None]] 

我需要计算的这种转置的矩阵。我做了以下内容:

def transpose(matrix): 
    # Makes a copy of the matrix 
    result = matrix 
    # Computes tranpose 
    for i in range(2): 
     for j in range(2): 
      result[j][i] = matrix[i][j] 

    return result 

但是这给了我的错误结果:

[[2, None], 
[None, None]] 

,而应该是

[[2, 2], 
[None, None]] 

谁能告诉我我哪里错我的代码?

+0

你可以用它做了一个通用的矩阵'numpy' ,矩阵= numpy.matrix(矩阵)'和'matrix.T'是结果 –

回答

3

问题是,变量result指的是matrix,也就是说,你不做一个副本,所以在for循环中你实际上也改变了matrix。您可以通过的matrix在结果的副本list解决这个问题:

result = [list(x) for x in matrix] 

见的问题:How to clone or copy a list?


需要注意的是一个更简单的方法是使用NumPy

import numpy as np 
matrix = np.matrix([[2, None],[2, None]]) 

然后使用matrix.T获得转置:

matrix([[2, 2], 
     [None, None]], dtype=object) 
3

你一个参考到同一个矩阵,尝试初始化一个新问题:

def transpose(matrix): 
    # Makes a copy of the matrix 
    result = [[None]* len(x) for x in matrix] 
    # Computes tranpose 
    for i in range(2): 
     for j in range(2): 
      result[i][j] = matrix[j][i] 

    return result 

您也可以使用列表comprehesion

def transpose(matrix): 
    return [[matrix[i][j] for i in range(len(matrix[j]))] for j in range(len(matrix))]