Suponha que sim;
LIST = [[array([1, 2, 3, 4, 5]), array([1, 2, 3, 4, 5],[1,2,3,4,5])] # inner lists are numpy arrays
Tento me converter;
array([[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5])
Estou resolvendo isso por iteração no vstack agora, mas é muito lento para LIST especialmente grande
O que você sugere da maneira mais eficiente?
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.Respostas:
Em geral, você pode concatenar uma sequência inteira de matrizes ao longo de qualquer eixo:
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: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 porn
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 equivalenterow_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: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 seuLIST
.Há também uma função
column_stack
e atalho análogosc_[...]
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:
... porque os arrays podem ser construídos a partir de uma sequência de outros arrays, adicionando uma nova dimensão ao início.
fonte
A partir da versão 1.10 do NumPy, temos a pilha de métodos . Ele pode empilhar matrizes de qualquer dimensão (todas iguais):
Aproveitar,
fonte
Eu verifiquei alguns dos métodos de desempenho de velocidade e descobri que não há diferença! A única diferença é que, usando alguns métodos, você deve verificar cuidadosamente as dimensões.
Cronometragem:
Como você pode ver, tentei 2 experimentos - usando
np.random.rand(10000)
enp.random.rand(1, 10000)
E se usarmos matrizes 2dnp.stack
enp.array
criarmos uma dimensão adicional - result.shape é (1,10000,10000) e (10000,1,10000) então eles precisam de ações adicionais para evitar isso .Código:
fonte