在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) ]