使用 for 循环转置矩阵(仅)

Transpose a matrix using for loops (only)

我正在尝试创建用于转置数组的代码

我来自 Matlab,我创建了这段代码(效果很好):

A = [1,2,3,0,-2,0 ; 0,2,0,1,2,3];

n = size(A);

for i=1:n(2)

    for j=1:n(1)

     M(i,j) = A(j,i) 

    end
end

在 Python 我正在尝试这个(使用相同的逻辑):

M = [
    [1,2,3,0,-2,0],
    [0,2,0,1,2,3]
    ]

LM = (len(M),len(M[0]))
print(LM)

Maux=[[]]
print(Maux)


for i in range(0,LM[1]):
    for j in range(0,LM[0]):

        Maux[i][j] = M[j][i]
        print(Maux)

但是我编译的时候报错:

Maux[i][j] = M[j][i] IndexError: 列表赋值索引超出范围

而且我知道使用 numpy 我也可以创建此代码:

import numpy as np 

A = [

    [1,2,3,0,-2,0],
    [0,2,0,1,2,3]

    ]

T = np.transpose(A)

print(A)
print(T)

但是我只需要使用 for 循环创建这段代码,知道吗?

Maux=[[]]

是一个包含单个空列表的列表。它的形状为 (1, 0),这就是为什么您会得到索引越界错误的原因。您需要将 Maux 初始化为与 M 相同的形状。所以像

Maux = [[0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0]]

您需要初始化 Maux 来处理转置:

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

您的代码要求 python 将值分配给不存在的位置(因为 Maux 是空列表)。

总而言之,您需要将 Maux 创建为与转置维度相同的列表的空列表:如果 Mn by m,那么 Maux 必须是 m 乘以 n 而不是 1 乘以 0.