【问题标题】:Attempting to transpose a matrix using python3尝试使用python3转置矩阵
【发布时间】:2014-06-26 02:14:18
【问题描述】:

我知道我缺少一些部分来生成这个矩阵,但我似乎从一开始就找不到我的错误。

我有三个任务。

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'  

【问题讨论】:

    标签: python python-3.x matrix transpose


    【解决方案1】:

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

    x = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
    
    print x
    print map(list,zip(*x))
    

    我们在zip 的输出中使用map() list() 函数,因为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 后验证是否有括号 ()

    【讨论】:

    • 我已经创建了一个文件,我必须在命令行中导入,我的主要目标是从 4x3 变为 3x4。例如: 'original' '1 2 3 4' '5 6 7 8' '9 10 11 12' 当程序运行时它应该创建: '1 4 7 10' '2 5 8 11' '3 6 9 12'
    • 另外,现在我得到一个“类型错误:'int'对象不支持项目分配
    • 将错误添加到您的问题中,带有行号和完整的回溯。
    • ' Traceback(最近一次调用最后):文件“transpose.py”,第 51 行,在 main() 文件“transpose.py”,第 48 行,在 main readInput(sys. argv[1],grid) 文件“transpose.py”,第 40 行,在 readInput grid[r][c]=v TypeError: 'int' object does not support item assignment'
    • 将错误添加到您的问题中,带有行号和完整的回溯。
    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多