Em geral, você pode concatenar uma sequência inteira de matrizes ao longo de qualquer eixo:
numpy.concatenate( LIST, axis=0 )
mas você faz precisa se preocupar com a forma e dimensionalidade de cada matriz na lista (para uma saída de 3x5 2-dimensional, você precisa se certificar de que eles são todos os 2-dimensionais arrays de n-por-5 já). Se você deseja concatenar matrizes unidimensionais como as linhas de uma saída bidimensional, é necessário expandir sua dimensionalidade.
Como aponta a resposta de Jorge, há também a função stack
, introduzida no numpy 1.10:
numpy.stack( LIST, axis=0 )
Isso leva a uma abordagem complementar: ele cria uma nova visualização de cada array de entrada e adiciona uma dimensão extra (neste caso, à esquerda, de modo que cada n
array 1D -element torna-se um array 1 por n
2D) antes de concatenar. Ele só funcionará se todas as matrizes de entrada tiverem a mesma forma - mesmo ao longo do eixo de concatenação.
vstack
(ou de forma equivalente row_stack
) é muitas vezes uma solução mais fácil de usar porque levará uma sequência de matrizes unidimensionais e / ou bidimensionais e expandirá a dimensionalidade automaticamente quando necessário e somente quando necessário, antes de concatenar a lista inteira. Onde uma nova dimensão é necessária, ela é adicionada à esquerda. Novamente, você pode concatenar uma lista inteira de uma vez, sem precisar iterar:
numpy.vstack( LIST )
Esse comportamento flexível também é exibido pelo atalho sintático numpy.r_[ array1, ...., arrayN ]
(observe os colchetes). Isso é bom para concatenar alguns arrays nomeados explicitamente, mas não é bom para sua situação porque essa sintaxe não aceita uma sequência de arrays, como o seu LIST
.
Há também uma função column_stack
e atalho análogos c_[...]
para empilhamento horizontal (coluna), bem como uma função quase análogahstack
- embora por algum motivo a última seja menos flexível (é mais estrita sobre a dimensionalidade dos arrays de entrada e tenta concatenar Arrays 1-D ponta a ponta em vez de tratá-los como colunas).
Finalmente, no caso específico de empilhamento vertical de matrizes 1-D, o seguinte também funciona:
numpy.array( LIST )
... porque os arrays podem ser construídos a partir de uma sequência de outros arrays, adicionando uma nova dimensão ao início.
LIST = [[array([1, 2, 3, 4, 5]), array([1, 2, 3, 4, 5],[1,2,3,4,5])]
esta não é a sintaxe correta do Python. Por favor, esclareça.