对于在Python中为NxN矩阵转置创建结果矩阵感到困惑

ghhkc1vu  于 2023-05-23  发布在  Python
关注(0)|答案(1)|浏览(160)

在使“结果”矩阵=输入矩阵时,NxN矩阵转置给出错误答案
新手程序员。我正在尝试转置NxN矩阵。把代码放在这里是为了把问题弄清楚:

def flippingMatrix(matrix):
    result=[[0 for i in range(len(matrix))] for j in range(len(matrix))]
    for i in result:
        print(i)
    
    for i in range(len(matrix)):
        for j in range(len(matrix)):
            result[j][i]=matrix[i][j]
    
    for i in result:
        print(i)
            

# //Main Program//
n = int(input().strip())

matrix = []

for i in range(n):
    matrix.append(list(map(int, input().rstrip().split())))

result = flippingMatrix(matrix)

现在,如果我们运行这个程序,我们输入'N',它是否。行和列的集合。在下一行中,元素进入矩阵。这是我给出的输入:
2
1 2
3 4
输出:

[0, 0]     //This is the result matrix that I made//
[0, 0]
[1, 3]     //The final result matrix//
[2, 4]

问题来了:如果,我将

"result=matrix"

而不是

result=[[0 for i in range(len(matrix))] for j in range(len(matrix))]

我回答错了。我假设我们需要一个结果矩阵作为NxN矩阵的布局。那么为什么使结果与输入相同会给出错误的答案呢?无论如何,它将被覆盖。
使用与前面相同的输入,我得到以下输出:

[1, 2]     //Initial result matrix which is the copied input matrix//
[3, 4]
[1, 2]     //The final result matrix//
[2, 4]

如果问题有点不清楚,我很抱歉,我已经尽力了。如果任何人需要进一步的解释,评论这个帖子,我会尽量解释我的问题

f1tvaqid

f1tvaqid1#

你的函数应该有一个return,如果你在它的作用域内赋值matrix=result,这不会传播到函数之外,它只是一个引用/指针赋值。不复制每个矩阵的值。
尝试:

def flippingMatrix(matrix):
    result=[[0 for i in range(len(matrix))] for j in range(len(matrix))]
    for i in range(len(matrix)):
        for j in range(len(matrix)):
            result[j][i]=matrix[i][j]
    return result
            

# //Main Program//
n = int(input().strip())

matrix = []

for i in range(n):
    matrix.append(list(map(int, input().rstrip().split())))

print(matrix)
result = flippingMatrix(matrix)
print( result)

此处测试n = 3:

def flippingMatrix(matrix):
    result=[[0 for i in range(len(matrix))] for j in range(len(matrix))]
    for i in range(len(matrix)):
        for j in range(len(matrix)):
            result[j][i] = matrix[i][j]
    return result
            

# //Main Program//
n = 3
matrix = [[i+j*n for i in range(n)] for j in range(3)]
print( matrix) # returns [[0, 1, 2], [3, 4, 5], [6, 7, 8]]

matrix = flippingMatrix(matrix)
print( matrix) # returns [[0, 3, 6], [1, 4, 7], [2, 5, 8]]

相关问题