#### [SOLVED] Matrix Transpose in Python

I am trying to create a matrix transpose function for python but I can't seem to make it work. Say I have

``````theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
``````

and I want my function to come up with

``````newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
``````

So in other words, if I were to print this 2D array as columns and rows I would like the rows to turn into columns and columns into rows.

I made this so far but it doesn't work

``````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
``````

#### @sharif_42 2020-02-10 11:10:46

you can try this with list comprehension like the following

```matrix = [['a','b','c'],['d','e','f'],['g','h','i']] n = len(matrix) transpose = [[row[i] for row in matrix] for i in range(n)] print (transpose)```

#### @rasoul poordelan 2019-09-27 21:50:59

You may do it simply using python comprehension.

``````arr = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i']
]
transpose = [[arr[y][x] for y in range(len(arr))] for x in range(len(arr[0]))]
``````

#### @RyanNerd 2019-09-27 22:29:44

Although this may be a correct answer. Two lines of code isn't very useful without an explanation of what and how it solves the original question. Please provide details to your answer.

#### @Jean-François Fabre 2019-09-28 09:05:18

when posting a new answer to an old question, expectations are high. Please don't post an inferior solution to the ones already posted

#### @Hassan Bahaloo 2019-07-05 06:57:22

If you want to transpose a matrix like A = np.array([[1,2],[3,4]]), then you can simply use A.T, but for a vector like a = [1,2], a.T does not return a transpose! and you need to use a.reshape(-1, 1), as below

``````import numpy as np
a = np.array([1,2])
print('a.T not transposing Python!\n','a = ',a,'\n','a.T = ', a.T)
print('Transpose of vector a is: \n',a.reshape(-1, 1))

A = np.array([[1,2],[3,4]])
print('Transpose of matrix A is: \n',A.T)
``````

#### @jfs 2011-02-08 19:41:39

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')]
``````

#### @Antony Hatchkins 2013-03-28 08:38:38

if you're going to iterate through the results, `izip` from `itertools` can save memory for large arrays.

#### @acollection_ 2016-02-28 03:15:19

How would you have it return a list for the sub lists? Like `[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]` instead of `[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]`?

#### @jfs 2016-02-28 12:45:33

@acollection_: `map(list, zip(*theArray))`.

#### @user3728501 2016-10-20 16:38:15

Why the asterisk?

#### @user3728501 2016-10-20 17:23:24

@J.F.Sebastian I read that but unfortunately I didn't understand any of it

#### @jfs 2016-10-20 18:01:45

@user3728501 have you just read the question, its duplicate and their more than a dozen answers in 8 minutes? Or have you seen them before? The argument unpacking is discussed even in the official Python tutorial. If it is still unclear; pick an answer that you understand the most and ask a separate question about the unclear parts.

#### @M.K Rana 2018-02-14 14:13:47

Python Program to transpose matrix:

``````row,col = map(int,input().split())
matrix = list()

for i in range(row):
r = list(map(int,input().split()))
matrix.append(r)

trans = [[0 for y in range(row)]for x in range(col)]

for i in range(len(matrix[0])):
for j in range(len(matrix)):
trans[i][j] = matrix[j][i]

for i in range(len(trans)):
for j in range(len(trans[0])):
print(trans[i][j],end=' ')
print(' ')
``````

This is not useful!

#### @user2412711 2017-08-19 18:10:40

`

``````def transpose(m):
return(list(map(list,list(zip(*m)))))``````

`This function will return the transpose

#### @Ravneet Singh 2017-08-14 21:58:13

``````def transpose(matrix):
listOfLists = []
for row in range(len(matrix[0])):
colList = []
for col in range(len(matrix)):
colList.append(matrix[col][row])
listOfLists.append(colList)

return listOfLists
``````

#### @Ravneet Singh 2017-08-14 22:00:08

Its a simple implementation for a transpose, though there are libraries like mentioned in other answers are also available.

#### @mohammad hassan jafari 2016-03-13 19:16:41

``````def transpose(matrix):
x=0
trans=[]
b=len(matrix[0])
while b!=0:
trans.append([])
b-=1
for list in matrix:
for element in list:
trans[x].append(element)
x+=1
x=0
return trans
``````

#### @Vanuan 2016-02-03 18:51:17

This one will preserve rectangular shape, so that subsequent transposes will get the right result:

``````import itertools
def transpose(list_of_lists):
return list(itertools.izip_longest(*list_of_lists,fillvalue=' '))
``````

#### @chaitanya 2015-03-30 05:56:18

``````a=[]
def showmatrix (a,m,n):
for i in range (m):
for j in range (n):
k=int(input("enter the number")
a.append(k)
print (a[i][j]),

print('\t')

def showtranspose(a,m,n):
for j in range(n):
for i in range(m):
print(a[i][j]),
print('\t')

a=((89,45,50),(130,120,40),(69,79,57),(78,4,8))
print("given matrix of order 4x3 is :")
showmatrix(a,4,3)

print("Transpose matrix is:")
showtranspose(a,4,3)
``````

Much easier with numpy:

``````>>> arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> arr
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> arr.T
array([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
>>> theArray = np.array([['a','b','c'],['d','e','f'],['g','h','i']])
>>> theArray
array([['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i']],
dtype='|S1')
>>> theArray.T
array([['a', 'd', 'g'],
['b', 'e', 'h'],
['c', 'f', 'i']],
dtype='|S1')
``````

#### @roo.firebolt 2014-04-27 18:21:13

``````#generate matrix
matrix=[]
m=input('enter number of rows, m = ')
n=input('enter number of columns, n = ')
for i in range(m):
matrix.append([])
for j in range(n):
elem=input('enter element: ')
matrix[i].append(elem)

#print matrix
for i in range(m):
for j in range(n):
print matrix[i][j],
print '\n'

#generate transpose
transpose=[]
for j in range(n):
transpose.append([])
for i in range (m):
ent=matrix[i][j]
transpose[j].append(ent)

#print transpose
for i in range (n):
for j in range (m):
print transpose[i][j],
print '\n'
``````

The "best" answer has already been submitted, but I thought I would add that you can use nested list comprehensions, as seen in the Python Tutorial.

Here is how you could get a transposed array:

``````def matrixTranspose( matrix ):
if not matrix: return []
return [ [ row[ i ] for row in matrix ] for i in range( len( matrix[ 0 ] ) ) ]
``````

#### @bigjim 2011-02-08 20:38:07

If your rows are not equal you can also use `map`:

``````>>> uneven = [['a','b','c'],['d','e'],['g','h','i']]
>>> map(None,*uneven)
[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', None, 'i')]
``````

Edit: In Python 3 the functionality of `map` changed, `itertools.zip_longest` can be used instead:
Source: What’s New In 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')]
``````

#### @Asterisk 2011-02-08 19:51:49

``````def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])

for i in range(len(transposed)):
transposed[i] = [None]*len(transposed)

for t in range(len(anArray)):
for tt in range(len(anArray[t])):
transposed[t][tt] = anArray[tt][t]
return transposed

theArray = [['a','b','c'],['d','e','f'],['g','h','i']]

print matrixTranspose(theArray)
``````

#### @sqwerl 2012-07-08 23:05:21

``````>>> 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']]
``````

the list generator creates a new 2d array with list items instead of tuples.

#### @ASL 2016-10-17 19:34:37

This is the way to go if you want to assign the result to a variable (as opposed to, e.g., iterating over it directly) — assuming you want lists instead of tuples, as mentioned.

#### @ASL 2016-10-18 12:42:20

Another option (as implied by the comments in the accepted answer) would be: `list(map(list, zip(*theArray)))`

#### @Franck Dernoncourt 2012-03-08 18:05:56

To complete J.F. Sebastian's answer, if you have a list of lists with different lengths, check out this great post from ActiveState. In short:

The built-in function zip does a similar job, but truncates the result to the length of the shortest list, so some elements from the original data may be lost afterwards.

To handle list of lists with different lengths, use:

``````def transposed(lists):
if not lists: return []
return map(lambda *row: list(row), *lists)

def transposed2(lists, defval=0):
if not lists: return []
return map(lambda *row: [elem or defval for elem in row], *lists)
``````

#### @Olli 2012-10-04 08:07:52

That's good catch. However, matrices doesn't have lists with different lengths.

#### @Franck Dernoncourt 2013-03-09 00:59:47

It depends on how they are stored.

#### @Ned Batchelder 2011-02-08 19:48:29

The problem with your original code was that you initialized `transpose[t]` at every element, rather than just once per row:

``````def matrixTranspose(anArray):
transposed = [None]*len(anArray[0])
for t in range(len(anArray)):
transposed[t] = [None]*len(anArray)
for tt in range(len(anArray[t])):
transposed[t][tt] = anArray[tt][t]
print transposed
``````

This works, though there are more Pythonic ways to accomplish the same things, including @J.F.'s `zip` application.

#### @Vector 2019-11-10 03:18:12

Note that this implementation doesn't work with matrices that have different numbers of columns and rows

### [SOLVED] Finding the index of an item given a list containing it in Python

• 2008-10-07 01:39:38
• Eugene M
• 3645434 View
• 2995 Score
• Tags:   python list indexing

### [SOLVED] How to get the current time in Python

• 2009-01-06 04:54:23
• user46646
• 3165973 View
• 2721 Score
• Tags:   python datetime time

### [SOLVED] Manually raising (throwing) an exception in Python

• 2010-01-12 21:07:40
• TIMEX
• 1663425 View
• 2159 Score
• Tags:   python exception