17

如何获得这个矩阵的转置......任何更简单的算法方法来做到这一点......

第一个问题:

 Input  a=[[1,2,3],[4,5,6],[7,8,9]]
 Expected output a=[[1, 4, 7], [2, 5, 8], [3, 6, 9]] 

第二个问题:

Zip 给了我下面的输出,当我不知道数组中有多少个元素时,我如何压缩,在这种情况下,我知道 3 个元素 a[0]、a[1]、a[2],但怎么能我压缩一个 [n] 个元素

 >>> zip(a[0],a[1],a[2])
 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
4

7 回答 7

29

使用zip(*a)

>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

它是如何工作的: zip(*a) 等于 zip(a[0], a[1], a[2])。

于 2013-11-10T09:16:27.557 回答
20

问题答案:

>>> import numpy as np
>>> first_answer = np.transpose(a)
>>> second_answer = [list(i) for i in zip(*a)]

感谢 afg 的帮助

于 2012-04-16T07:06:09.830 回答
3

您可以使用 numpy.transpose

numpy.转置

>>> import numpy
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> numpy.transpose(a)
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])
于 2012-04-16T07:05:17.373 回答
3

解决方案是使用tuple()函数。

这是一个如何在您的情况下执行此操作的示例:

a      = [[1,2,3],[4,5,6],[7,8,9]]
output = tuple(zip(*a))

print(output)
于 2019-10-04T06:41:54.590 回答
1

您可以使用list(zip(*a)).

通过使用*a,您的列表列表可以包含任意数量的条目。

于 2020-03-26T06:43:01.370 回答
0

试试这个替换适当的变量

import numpy as np

data = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11))

data_transpose = np.transpose(data) # replace with your code
print(data_transpose)
于 2020-08-08T22:50:34.863 回答
0
  1. 无拉链

     def transpose(A):
        res = []
    
        for col in range(len(A[0])):
            tmp = []
            for row in range(len(A)):
                tmp.append(A[row][col])
    
            res.append(tmp)
    
        return res
    
  2. 使用拉链

    def transpose(A):
        return map(list, zip(*A))
    
于 2021-08-13T13:11:12.883 回答