Tenho uma lista com matrizes NumPy como elementos que se parece com isto:
[array([ 0.2, -2.3, 5.3]),
array([-1.6, -1.7, 0.3]),
array([ 2.4, -0.2, -3.0]),
array([-4.1, -2.3, -2.7])]
e eu quero convertê-lo em 3 listas, cada uma com elementos das colunas da lista acima. Então o resultado desejado parece
list1 = [0.2, -1.6, 2.4, -4.1]
list2 = [-2.3, -1.7, -0.2, -2.3]
list3 = [5.3, 0.3, -3.0, -2.7]
Você pode conseguir isso usando o método NumPy
transpose
T
como este:Exemplo completo
Você pode usar zip
Com lista comp em uma linha usando
zip
:você pode tentar
Supondo que sua lista de matrizes foi definida da seguinte maneira:
Então você pode usar a seguinte frase:
A função NumPy
transpose()
converterá implicitamentearray_list
em um array NumPy bidimensional (então não há necessidade de fazer isso explicitamente) antes de transpô-lo (ou seja, transformar linhas em colunas e colunas em linhas). Chamartolist()
o array resultante o transformará em uma lista de listas, com três elementos (correspondentes às três colunas originais) no nível mais alto. Atribuir o resultado comlist1, list2, list3 = ...
"descompactará" essa lista de três elementos nas três variáveis de destino.Se você concordar que os resultados (
list1
,list2
,list3
) sejam novamente matrizes NumPy em vez de listas, você pode omitirtolist()
, escrevendo apenas:Você pode empilhar a lista em uma matriz numpy 2D e transpô-la.
Seria mais apropriado converter a lista inteira em uma lista de listas 2D do Python em vez de instanciar três novas variáveis, de qualquer forma você pode fazer isso com
Ou você pode converter a lista original de listas em uma matriz numpy, transpô-la e convertê-la novamente em uma lista.