Digamos que eu tenho uma matriz a
:
a = np.array([[1,2,3], [4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
Gostaria de convertê-lo em uma matriz 1D (ou seja, um vetor de coluna):
b = np.reshape(a, (1,np.product(a.shape)))
mas isso retorna
array([[1, 2, 3, 4, 5, 6]])
que não é o mesmo que:
array([1, 2, 3, 4, 5, 6])
Eu posso pegar o primeiro elemento dessa matriz para convertê-lo manualmente em uma matriz 1D:
b = np.reshape(a, (1,np.product(a.shape)))[0]
mas isso exige que eu saiba quantas dimensões a matriz original possui (e concatene [0] 's ao trabalhar com dimensões maiores)
Existe uma maneira independente de dimensões de obter um vetor de coluna / linha de um ndarray arbitrário?
ravel()
retorna uma visualização, mas isso nem sempre é verdade. Há casos em queravel()
retorna uma cópia. </pedantic>a.ravel()
parece ser cerca de três vezes mais rápido quea.reshape(-1)
.a.flatten()
é muito mais lento, pois precisa fazer uma cópia.ou simplesmente:
fonte
b = a.reshape(-1)
para abreviar no primeiro exemplo.Uma das maneiras mais simples é usar
flatten()
, como este exemplo:Minha matriz era assim:
Após o uso
flatten()
:É também a solução de erros desse tipo:
fonte
Para obter uma lista de matrizes com tamanhos diferentes, use o seguinte:
Resultado:
[1 2 3 4 5 6 7 8]
fonte
a
costasb
?Eu queria ver um resultado de referência das funções mencionadas nas respostas, incluindo as do unutbu .
Também quero ressaltar que o documento numpy recomenda usar
arr.reshape(-1)
caso a visualização seja preferível. (emboraravel
seja um pouco mais rápido no resultado a seguir)Referência
Funções:
np.ravel
: retorna a visualização, se possívelnp.reshape(-1)
: retorna a visualização, se possívelnp.flatten
: retorna cópianp.flat
: retornanumpy.flatiter
. igual aiterable
versão numpy: '1.18.0'
Tempos de execução em
ndarray
tamanhos diferentesConclusão
Código usado
fonte
Embora isso não esteja usando o formato de matriz np, (para modificar meu código com preguiça), isso deve ser o que você deseja ... Se você realmente deseja um vetor de coluna, deseja transpor o resultado do vetor. Tudo depende de como você planeja usar isso.
Portanto, se você precisar transpor, poderá fazer algo assim:
fonte