Python中的快速矩阵转置

psi*_*lia 4 python algorithm matrix

是否有任何快速方法在Python中转换矩形2D矩阵(不涉及任何库导入).

说,如果我有一个数组

X=[ [1,2,3],
    [4,5,6] ]
Run Code Online (Sandbox Code Playgroud)

我需要一个数组Y,它应该是X的转置版本,所以

Y=[ [1,4],
    [2,5],
    [3,6] ] 
Run Code Online (Sandbox Code Playgroud)

unb*_*eli 20

简单:Y = zip(*X)

>>> X=[[1,2,3], [4,5,6]]
>>> Y=zip(*X)
>>> Y
[(1, 4), (2, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)

编辑:回答有关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]
Run Code Online (Sandbox Code Playgroud)

所以,当X[[1,2,3], [4,5,6]],zip(*X)zip([1,2,3], [4,5,6])


yar*_*sca 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]]
Run Code Online (Sandbox Code Playgroud)

如果内部对完全需要列表,请使用第二个.

  • @Mike:如果您有兴趣,我只是做了一个快速的基准测试.当矩阵大小约为1000x1000时,`izip()`开始获胜.因此,如果大多数矩阵输入都小于维度,那么`zip()`就很棒了.(Python 2.6.5) (2认同)

Mik*_*ham 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]])
Run Code Online (Sandbox Code Playgroud)

"不涉及任何图书馆的进口"是一种愚蠢的,非生产性的要求.