gpt4 book ai didi

python - 如何仅使用循环将 n×m 矩阵转置为新的 m×n 矩阵?

转载 作者:太空宇宙 更新时间:2023-11-03 21:05:18 25 4
gpt4 key购买 nike

函数transpose(a)应该创建一个新矩阵,该矩阵是原始矩阵的转置,并将新矩阵返回给调用者。

这是我之前的尝试之一,如果我只使用循环,这对我来说是最有意义的......

def transpose(a):
m = [None]*len(a[0])

for i in range(len(a)):
m[i] = [None]*len(a)
for j in range(len(a[i])):
m[i][j] = a[j][i]

return m

我在 python shell 中尝试了以下代码: transpose([[4,8,10,68],[5,12,8,71],[5.5,11,8,70.5]]) 但收到“IndexError:列表索引超出范围”

最佳答案

首先,请注意您没有矩阵。矩阵。相反,您有一个由列表组成的列表,这是表示矩阵数学抽象的一种方式。

您的代码的问题只是轴混淆了:

def transpose(a):
m = [None] * len(a[0])
for i in range(len(a[0])): # len(a[0]) is the number of elements in the inner list, but after transposition it will be the number of elements in the outer list
m[i] = [None] * len(a)
for j in range(len(a)): # and the other way round for len(a)
m[i][j] = a[j][i]

return m

也就是说,我建议采用不同的方法。使用enumerate,我们可以同时引用a的元素,及其索引:

def transpose(a):
m = [None] * len(a)
for i, sublist in enumerate(a):
m[i] = [None] * len(sublist)
for j, element in enumerate(sublist):
m[i][j] = element

return m

这保持了您最初答案的精神,但(IMO)更干净。

第三种方法是放弃创建填充 Nonelist 并使用 append 代替:

def transpose(a):
m = []
for i, sublist in enumerate(a):
m.append([])
for j, element in enumerate(sublist):
m[i].append(element)

return m

最后,为了完整起见,采用基于非循环的方法(请注意,内部元素是元组而不是列表:

def transpose(a):
return list(zip(*a))

关于python - 如何仅使用循环将 n×m 矩阵转置为新的 m×n 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447626/

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