使用 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
创建为与转置维度相同的列表的空列表:如果 M
是 n
by m
,那么 Maux
必须是 m
乘以 n
而不是 1 乘以 0.
我正在尝试创建用于转置数组的代码
我来自 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
创建为与转置维度相同的列表的空列表:如果 M
是 n
by m
,那么 Maux
必须是 m
乘以 n
而不是 1 乘以 0.