在Python中调换matrix

我正在尝试在Python中创build一个matrix转置函数。 matrix是一个二维数组,表示为整数列表。 例如,下面是一个2X3matrix(意思是matrix的高度是2,宽度是3):

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

第i个索引中的第j个项目应该成为第j个索引中的第i个项目。 以下是上述示例的转换方式:

 >>> transpose([[1, 2, 3], [4, 5, 6]]) [[1, 4], [2, 5], [3, 6]] >>> transpose([[1, 2], [3, 4]]) [[1, 3], [2, 4]] 

我该怎么做?

你可以使用zip来获得一个matrix的转置:

 >>> A = [[ 1, 2, 3],[ 4, 5, 6]] >>> zip(*A) [(1, 4), (2, 5), (3, 6)] >>> lis = [[1,2,3], ... [4,5,6], ... [7,8,9]] >>> zip(*lis) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] 

如果你想要返回的列表是列表的列表:

 >>> [list(x) for x in zip(*lis)] [[1, 4, 7], [2, 5, 8], [3, 6, 9]] #or >>> map(list, zip(*lis)) [[1, 4, 7], [2, 5, 8], [3, 6, 9]] 

有没有奖懒惰和使用NumPy数组的转置function? ;)

 import numpy as np a = np.array([(1,2,3), (4,5,6)]) b = a.transpose() 

如果我们想要返回相同的matrix,我们会写:

 return [[ m[row][col] for col in range(0,width) ] for row in range(0,height) ] 

这样做是通过遍历每一行并返回每一列中的每个元素遍历matrixm。 所以订单会是这样的:

 [[1,2,3], [4,5,6], [7,8,9]] 

现在问题3,我们反而想逐列,返回每一行中的每个元素。 所以订单会是这样的:

 [[1,4,7], [2,5,8], [3,6,9]] 

因此,只要切换我们迭代的顺序:

 return [[ m[row][col] for row in range(0,height) ] for col in range(0,width) ]