Estou tentando criar uma função de transposição de matriz para python, mas não consigo fazê-lo funcionar. Diga que eu tenho
theArray = [['a','b','c'],['d','e','f'],['g','h','i']]
e eu quero que minha função venha com
newArray = [['a','d','g'],['b','e','h'],['c', 'f', 'i']]
Portanto, em outras palavras, se eu imprimir essa matriz 2D como colunas e linhas, gostaria que as linhas se transformassem em colunas e colunas em linhas.
Eu fiz isso até agora, mas não funciona
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
python
list
multidimensional-array
Julio Diaz
fonte
fonte
izip
desdeitertools
pode salvar a memória para grandes matrizes.[['a', 'b', 'g'], ['d', 'e', 'h'], ['c', 'f', 'i']]
vez de[('a', 'd', 'g'), ('b', 'e', 'h'), ('c', 'f', 'i')]
?map(list, zip(*theArray))
.zip
já retorna um iterador: docs.python.org/3.0/whatsnew/…o gerador de lista cria uma nova matriz 2D com itens de lista em vez de tuplas.
fonte
list(map(list, zip(*theArray)))
Se suas linhas não forem iguais, você também pode usar
map
:Edit: No Python 3, a funcionalidade
map
alteradaitertools.zip_longest
pode ser usada:Fonte: Novidades do Python 3.0
fonte
Muito mais fácil com numpy:
fonte
O problema com seu código original era que você inicializou
transpose[t]
em cada elemento, em vez de apenas uma vez por linha:Isso funciona, embora existam mais maneiras Pythonic de realizar as mesmas coisas, incluindo o
zip
aplicativo @ JF .fonte
Para concluir a resposta de JF Sebastian, se você tiver uma lista de listas com comprimentos diferentes, confira esta excelente postagem do ActiveState . Em resumo:
Para lidar com a lista de listas com comprimentos diferentes, use:
fonte
A "melhor" resposta já foi enviada, mas pensei em acrescentar que você pode usar a compreensão de listas aninhadas, como visto no Tutorial do Python .
Aqui está como você pode obter uma matriz transposta:
fonte
Este preservará a forma retangular, para que as transposições subsequentes obtenham o resultado certo:
fonte
você pode tentar isso com compreensão de lista como o seguinte
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)
fonte
Se você deseja transpor uma matriz como A = np.array ([[1,2], [3,4]]), então pode simplesmente usar AT, mas para um vetor como a = [1,2], aT não retorna uma transposição! e você precisa usar a.reshape (-1, 1), como abaixo
fonte
Você pode fazer isso simplesmente usando a compreensão de python.
fonte
fonte
fonte
fonte
fonte
fonte
`
`Esta função retornará a transposição
fonte
Programa Python para transpor matriz:
fonte