我试图在不实际使用矩阵大小的情况下在 python 中找到矩阵的转置。
我需要使用列表推导来做类似 [[row[i] for row in test] for i in range(n)] 的事情,其中 test 是一个 nxn 矩阵而不实际使用 n。
最佳答案
如果test
是由列表的列表表示的矩阵,那么
zip(*test)
是转置。例如,
In [16]: t = [[1,2,3],[4,5,6]]
In [17]: t
Out[17]: [[1, 2, 3],
[4, 5, 6]]
In [18]: zip(*t)
Out[18]: [(1, 4),
(2, 5),
(3, 6)]
(输出已格式化以更清楚地显示结果)。
理解zip(*t)
先学习how zip
works ,然后研究argument unpacking .它有点令人费解,但一旦您了解它的工作原理,您就会成为这两个概念的专家,而且效果非常令人愉悦。
这里没有理由使用列表推导式,但无论如何你都可以这样做:
In [21]: [[row[i] for row in t] for i in range(len(t[1]))]
Out[21]: [[1, 4], [2, 5], [3, 6]]
(len(t[1])
给出列数。)
关于python - 矩阵转置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767586/