gpt4 book ai didi

python - 在没有模块的 Python 中转置矩阵?

转载 作者:行者123 更新时间:2023-11-28 21:43:39 25 4
gpt4 key购买 nike

我试图在不使用 numpy 的情况下在 Python 3.x 中转置矩阵。出于某种原因,我在分配 new_matrix[col_num][row_num] 时遇到了问题。例如,如果我创建一个新的 Matrix 实例,如 test = Matrix([[1,2,3,],[4,5,6],[7,8,9]]) ,它第一次通过内部 for 循环时,new_matrix 变为 [[1,None,None],[1,None,None],[1,None,None]] 而不是 [[1,无,无],[无,无,无],[无,无,无]]。我不明白为什么会这样,也不知道为什么它要为列表的所有第一个元素赋值。

class Matrix:
def __init__(self, matrix):
self.matrix = matrix

def transpose(self):
new_matrix = [[None] * len(self.matrix[0])] * len(self.matrix)
row_num = 0
for row_num in range(len(self.matrix)):
for col_num in range(len(self.matrix[0])):
print(new_matrix[col_num][row_num])
print(new_matrix)

#assignment assigning more than one variable

new_matrix[col_num][row_num] = self.matrix[row_num][col_num]

print(new_matrix[col_num][row_num])
print(new_matrix)

col_num = 0
return new_matrix

最佳答案

new_matrix = [[None] * len(self.matrix[0])] * len(self.matrix)

必须替换为

new_matrix = [[None for  j in self.matrix[0]] for i in self.matrix] 

这样,所有的 None 都会“不同”。

但更短的方法是直接使用扩展列表构建结果:

MT= [[M[j][i] for j in range(len(M))] for i in range(len(M[0]))]

关于python - 在没有模块的 Python 中转置矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41902184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com