numpy: syntax / idiom to cast (n,) array a un (n, 1) array?

Me gustaría convertir un objeto de forma ndarray ndarray ( n ,) en uno que tenga forma ( n , 1). Lo mejor que he encontrado es rodar mi propia función _to_col:

 def _to_col(a): return a.reshape((a.size, 1)) 

Pero me cuesta creer que una operación tan ubicua no esté ya incorporada en la syntax de numpy. Me imagino que no he podido encontrar la búsqueda correcta en Google para encontrarla.

Usaría lo siguiente:

 a[:,np.newaxis] 

Una forma alternativa (pero quizás un poco menos clara) de escribir lo mismo es:

 a[:,None] 

Todo lo anterior (incluida su versión) son operaciones de tiempo constante.

np.expand_dims es mi favorito cuando quiero agregar un eje arbitrario.

Ninguno o np.newaxis es bueno para el código que no necesita tener un eje flexible. (respuesta de aix)

 >>> np.expand_dims(np.arange(5), 0).shape (1, 5) >>> np.expand_dims(np.arange(5), 1).shape (5, 1) 

Ejemplo de uso: degradar una matriz por cualquier eje dado

 >>> x = np.random.randn(4,5) >>> x - x.mean(1) Traceback (most recent call last): File "", line 1, in  ValueError: shape mismatch: objects cannot be broadcast to a single shape >>> ax = 1 >>> x - np.expand_dims(x.mean(ax), ax) array([[-0.04152658, 0.4229244 , -0.91990969, 0.91270622, -0.37419434], [ 0.60757566, 1.09020783, -0.87167478, -0.22299015, -0.60311856], [ 0.60015774, -0.12358954, 0.33523495, -1.1414706 , 0.32966745], [-1.91919832, 0.28125008, -0.30916116, 1.85416974, 0.09293965]]) >>> ax = 0 >>> x - np.expand_dims(x.mean(ax), ax) array([[ 0.15469413, 0.01319904, -0.47055919, 0.57007525, -0.22754506], [ 0.70385617, 0.58054228, -0.52226447, -0.66556131, -0.55640947], [ 1.05009459, -0.27959876, 1.03830159, -1.23038543, 0.73003287], [-1.90864489, -0.31414256, -0.04547794, 1.32587149, 0.05392166]])