尝试使用python3转置矩阵

时间:2014-06-26 02:14:18

标签: python python-3.x matrix transpose

我知道我错过了一些产生这个矩阵的部分,但我似乎从一开始就找不到我的错误。

我有三个任务。

1)显示空矩阵的样子。  2)显示原始矩阵(4x3)。  3)然后将矩阵转置为3x4。

import sys
from scanner import *

def createMatrix(size):
    if size == 0: return []
    else:
        return [0] + createMatrix(size -1)

def printGrid(gridlist):
    for row in gridlist:
        print (str(row)+"\n")

def nrows(g):
    return len(g)

def ncols(g):
    return len(g[0])

def printMatrix(g):
    for i in range(0,nrows,1):
        for j in range(0,ncols,1):
            print("The original matrix is:",g[i][j])
        print('')
    print('')

def printMatrixTranspose(g):
    for j in range(0,ncols,1):
        for i in range(0,nrows,1):
            print("The transposed matrix is:",g[i][j])
        print('')
    print('')

def readInput(filename,grid):
    s = Scanner(filename)
    r = s.readtoken()
    while r != "":
        r = int(r)
        c = s.readint()
        v = s.readint()
        grid[r][c]=v
        r = s.readtoken()
    s.close()

def main():
    grid = createMatrix(5)
    for i in range(4):
        grid[i] = createMatrix(5)
    readInput(sys.argv[1],grid)
    printMatrixTranspose(g)

main()

我一直收到这个错误,不确定如何修复它。

  Traceback (most recent call last):
  File "transpose.py", line 51, in <module>
    main()
  File "transpose.py", line 48, in main
    readInput(sys.argv[1],grid)
  File "transpose.py", line 37, in readInput
    r = int(r)
TypeError: int() argument must be a string or a number, not 'method'  

1 个答案:

答案 0 :(得分:0)

如果您将矩阵作为列表列表进行管理,则使用您的列表作为zip()函数的参数,转置非常简单,如下所示:

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

print x
print map(list,zip(*x))

我们map() list()函数在zip的输出中,因为zip会返回元组列表,而不是列表列表。

以上版画:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

编辑:该错误表明您添加的代码与您正在运行的代码不匹配。检查您的文件是否已保存,并在每次调用()后验证是否有readtoken括号。