Eu estou usando numpy. Eu tenho uma matriz com 1 coluna e N linhas e quero obter uma matriz com N elementos.
Por exemplo, se eu tiver M = matrix([[1], [2], [3], [4]])
, quero receber A = array([1,2,3,4])
.
Para conseguir isso, eu uso A = np.array(M.T)[0]
. Alguém conhece uma maneira mais elegante de obter o mesmo resultado?
Obrigado!
Respostas:
Se você quiser algo um pouco mais legível, faça o seguinte:
Equivalentemente, você também pode fazer:,
A = np.asarray(M).reshape(-1)
mas isso é um pouco menos fácil de ler.fonte
numpy.matrix
é um pouco controversa, mas os desenvolvedores entorpecidos concordam muito com você de que ter os dois é antitônico e irritante por várias razões. No entanto, a quantidade de códigos antigos e não mantidos "em estado selvagem" utilizadosmatrix
dificulta a remoção total.sklearn
). De fato, existemsparse matrix
tipos diferentesscipy
, que permitem acesso eficiente por linhas ou colunas. Eu imagino que isso possa ser um problema para mesclar os conceitos de matriz e matriz. Dito isso, estou me perguntando se também poderia ser introduzido umsparse array
tipo e se existem planos para isso. Alguma pista?https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
fonte
depende do que você quer dizer com elegância, suponho, mas é o que eu faria
fonte
Você pode tentar a seguinte variante:
fonte
Se você se importa com velocidade; Mas se você se importa com a memória:
fonte
Ou você pode tentar evitar alguns temps com
fonte
Primeiro, o
Mv = numpy.asarray(M.T)
que fornece uma matriz 4x1, mas 2D.Em seguida, execute
A = Mv[0,:]
, o que lhe dá o que deseja. Você poderia colocá-los juntosnumpy.asarray(M.T)[0,:]
,.fonte
Isso converterá a matriz em matriz
fonte
As funções ravel () e flatten () do numpy são duas técnicas que eu tentaria aqui. Gostaria de acrescentar às postagens feitas por Joe , Siraj , bubble e Kevad .
Ravel:
Achatar:
numpy.ravel()
é mais rápido , pois é uma função no nível da biblioteca que não faz nenhuma cópia da matriz. No entanto, qualquer alteração na matriz A será transferida para a matriz original M se você estiver usandonumpy.ravel()
.numpy.flatten()
é mais lento quenumpy.ravel()
. Mas se você está usandonumpy.flatten()
para criar A, em seguida, muda em um não vai ter transitado para a matriz M originais .numpy.squeeze()
eM.reshape(-1)
são mais lentos quenumpy.flatten()
enumpy.ravel()
.fonte