Python中的矩阵转置
我正在尝试为Python创建一个矩阵转置的函数,但我似乎无法让它正常工作。
假设我有
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
我希望我的函数能得到
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
换句话说,如果我把这个二维数组打印出来,想把行变成列,把列变成行。
到目前为止,我做了这个,但它不工作
def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
for tt in range(len(anArray[t])):
transposed[t] = [None]*len(anArray)
transposed[t][tt] = anArray[tt][t]
print transposed
19 个回答
42
如果你的行数不相等,你也可以使用 map
:
>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> map(None,*uneven)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
补充说明:在Python 3中,map
的功能发生了变化,可以使用 itertools.zip_longest
来代替:
来源:Python 3.0的新特性
>>> import itertools
>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> list(itertools.zip_longest(*uneven))
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
68
>>> theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
>>> [list(i) for i in zip(*theArray)]
[['a', 'd', 'g'], ['b', 'e', 'h'], ['c', 'f', 'i']]
这个列表生成器会创建一个新的二维数组,里面的元素是列表,而不是元组。
347
Python 2:
>>> theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
>>> zip(*theArray)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
Python 3:
>>> [*zip(*theArray)]
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]