Python 作业求教,矩阵转置

2019-11-08 16:40:02 +08:00
 HHH01

又有一题不是特别会做,求教大家, 需要用 python 写一个 function 去得出某个二维矩阵的转置矩阵。 好像看起来挺简单,转置矩阵就是 Nij=Nji,但是还没想到思路。因此求教大神。

如题,

Exercise 4. Within the module matrix_utils.py write a function transpose() . The function should accept one parameter matrix which is a two-dimensional matrix (in Python it is a list of lists of the same size). The function should return a transposed matrix. Example usages of this functions: matrix1 = [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4] ] print("Transposed:", transpose(matrix1)) Transposed: [[0, 0], [1, 1], [2, 2], [3, 3], [4, 4]] matrix2 = [[ ' a ' , ' b ' ], [ ' c ' , ' d ' ] ] print("Transposed:", transpose(matrix2)) Transposed: [[ 'a ' , ' c '] , [ 'b ' , ' d ']]

4011 次点击
所在节点    Python
20 条回复
KylinJiang
2019-11-08 16:46:56 +08:00
emmm 不太在意性能的话:
KylinJiang
2019-11-08 16:47:12 +08:00
map(list,zip(*N))
N 为你的多维数组
HHH01
2019-11-08 16:51:42 +08:00
@KylinJiang 不能用 zip,还没学到,用 lists 的 loop。。。
HHH01
2019-11-08 16:57:26 +08:00
我想到的思路,但是有问题
def transpose(matrix):
matrix == list
n = len(matrix)
tran_m = []
m=0
for m in range(0,n):
m += len(matrix[m])

temp=[]
for i in range(n):
tran_m=tran_m+[temp]

for j in range(m):
temp=temp+[matrix[j][i]]

return tran_m
HHH01
2019-11-08 17:09:34 +08:00
想到了!
def transpose(matrix):
matrix == list

tran_m = []

for i in range(len(matrix[0])):
temp=[]

for j in range(len(matrix)):
temp=temp+[matrix[j][i]]
tran_m=tran_m+[temp]

return tran_m
cherbim
2019-11-08 17:09:49 +08:00
```
def transpose(m):
result = []
row = len(m)
col = len(m[0])
for i in range(col):
item = []
for index in range(row):
item.append(m[index][i])
result.append(item)
return result


matrix1 = [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
print("Transposed:", transpose(matrix1))
```
cherbim
2019-11-08 17:11:14 +08:00
获得行数和列数,然后调一下行和列存入另一个矩阵
TimePPT
2019-11-08 17:37:31 +08:00
进来学习。

以及,每次看到这种题就感慨 numpy 真香 😂
Trim21
2019-11-08 17:45:51 +08:00
@TimePPT import numpy 交作业可还行 233
009694
2019-11-08 17:47:02 +08:00
t = [[1,2,3],[4,5,6]]
t_t = [[row[i] for row in t] for i in range(max(len(t) for t in t))]
009694
2019-11-08 17:49:03 +08:00
transpose = lambda t:[[row[i] for row in t] for i in range(max(len(t) for t in t))]
TimePPT
2019-11-08 18:11:24 +08:00
@Trim21 老师让你用锤子锯子钳子做把椅子,你转身去库房拉了个数控机床😂
ddzzhen
2019-11-08 18:15:10 +08:00
pandas 直接 T 就行了
xiri
2019-11-08 18:24:39 +08:00
emmmm,如果不是作业的话 numpy 分分钟就 over 了
coordinate
2019-11-08 19:03:37 +08:00
for i in range(len(mat)):
for j in range(i+1, len(mat[0])):
mat[i][j], mat[j][i] = mat[j][i], mat[i][j]
necomancer
2019-11-08 20:59:31 +08:00
traspose = lambda x : [ [x[i][j] for i in range(len(x))] for j in range(len(x[0]))]

转置只能对 (mxn) 形状的列表有效。
HHH01
2019-11-08 22:48:24 +08:00
@TimePPT 还没学到,不能用啊
HHH01
2019-11-08 22:49:59 +08:00
还是众人拾柴火焰高
cshlxm
2019-11-09 14:03:25 +08:00
import numpy 哈哈哈
list 的话,只能读一行,再循环每一行 append 一个对应数
yuuiasuka
2019-11-11 16:58:11 +08:00
可以参考下 numpy 里面的 transpose 方法是怎么实现的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/617668

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX