2015-12-05 15 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))]