Python中的快速矩阵转置

4 投票
3 回答
8067 浏览
提问于 2025-04-15 23:14

有没有什么快速的方法可以在Python中对一个矩形的二维矩阵进行转置,而不需要导入任何库呢?

比如说,如果我有一个数组

X=[ [1,2,3],
    [4,5,6] ]

我需要一个数组Y,它应该是X的转置版本,也就是说

Y=[ [1,4],
    [2,5],
    [3,6] ] 

3 个回答

5

如果你在处理矩阵,几乎可以肯定你应该使用numpy。这个库能让你更简单、更高效地进行数值运算,比起用纯Python代码要好很多。

>>> x = [[1,2,3], [4,5,6]]
>>> x = numpy.array(x)
>>> x
array([[1, 2, 3],
       [4, 5, 6]])
>>> x.T
array([[1, 4],
       [2, 5],
       [3, 6]])

“不使用任何库导入”这个要求真是无聊且没有意义。

6
>>> X = [1,2,3], [4,5,6]]
>>> zip(*X)
[(1,4), (2,5), (3,6)]
>>> [list(tup) for tup in zip(*X)]
[[1,4], [2,5], [3,6]]

如果里面的配对一定要是列表,那就选择第二个吧。

21

简单来说:Y=zip(*X)

>>> X=[[1,2,3], [4,5,6]]
>>> Y=zip(*X)
>>> Y
[(1, 4), (2, 5), (3, 6)]

补充:为了回答评论中关于zip(*X)是什么意思的问题,这里有一个来自Python手册的例子:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

所以,当X[[1,2,3], [4,5,6]]时,zip(*X)就变成了zip([1,2,3], [4,5,6])

撰写回答