Numpy Vector (N, 1) dimensión -> (N,) conversión de dimensión

Tengo una pregunta con respecto a la conversión entre matrices de dimensión (N,) y matrices de dimensión (N, 1). Por ejemplo, y es la dimensión (2,).

A=np.array([[1,2],[3,4]]) x=np.array([1,2]) y=np.dot(A,x) y.shape Out[6]: (2,) 

Pero lo siguiente mostrará y2 como dimensión (2,1).

 x2=x[:,np.newaxis] y2=np.dot(A,x2) y2.shape Out[14]: (2, 1) 

¿Cuál sería la forma más eficiente de convertir y2 de nuevo a y sin copiar?

Gracias tom

Related of "Numpy Vector (N, 1) dimensión -> (N,) conversión de dimensión"

reshape funciona para esto

 a = np.arange(3) # a.shape = (3,) b = a.reshape((3,1)) # b.shape = (3,1) b2 = a.reshape((-1,1)) # b2.shape = (3,1) c = b.reshape((3,)) # c.shape = (3,) c2 = b.reshape((-1,)) # c2.shape = (3,) 

tenga en cuenta también que reshape no copia los datos a menos que sea necesario para la nueva forma (que no es necesario que haga aquí):

 a.__array_interface__['data'] # (22356720, False) b.__array_interface__['data'] # (22356720, False) c.__array_interface__['data'] # (22356720, False) 

Utilice numpy.squeeze :

 >>> x = np.array([[[0], [1], [2]]]) >>> x.shape (1, 3, 1) >>> np.squeeze(x).shape (3,) >>> np.squeeze(x, axis=(2,)).shape (1, 3) 

Corte la dimensión que desee, como se muestra en el siguiente ejemplo. Para ir en la dirección inversa, puede utilizar None como el sector para cualquier dimensión que debe tratarse como una dimensión individual, pero que es necesaria para que las formas funcionen.

 In [786]: yy = np.asarray([[11],[7]]) In [787]: yy Out[787]: array([[11], [7]]) In [788]: yy.shape Out[788]: (2, 1) In [789]: yy[:,0] Out[789]: array([11, 7]) In [790]: yy[:,0].shape Out[790]: (2,) In [791]: y1 = yy[:,0] In [792]: y1.shape Out[792]: (2,) In [793]: y1[:,None] Out[793]: array([[11], [7]]) In [794]: y1[:,None].shape Out[794]: (2, 1) 

Alternativamente, puede utilizar reshape :

 In [795]: yy.reshape((2,)) Out[795]: array([11, 7]) 

La traducción opuesta puede ser hecha por:

 np.atleast_2d(y).T