porción de índice numpy con Ninguno

Trabajando a través de un ejemplo de ventana deslizante para numpy. Estaba tratando de comprender el ,None de start_idx = np.arange(B[0])[:,None]

 foo = np.arange(10) print foo print foo[:] print foo[:,] print foo[:,None] 

El efecto de None parece ser la transposición de la matriz.

 [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9] [[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]] 

Pero no estoy totalmente seguro. No he podido encontrar la documentación que explica lo que hace el segundo parámetro ( None ). También es un fragmento difícil de buscar en Google. La gran cantidad de documentos me hace pensar que tiene algo que ver con la indexación avanzada , pero no estoy lo suficientemente seguro.

foo[:, None] extiende la matriz tridimensional foo a la segunda dimensión. De hecho, numpy usa el alias np.newaxis para hacer esto.

considera foo

 foo = np.array([1, 2]) print(foo) [1 2] 

Una matriz unidimensional tiene limitaciones. Por ejemplo, ¿cuál es la transposición?

 print(foo.T) [1 2] 

Lo mismo que la propia matriz.

 print(foo.T == foo) [ True True] 

Esta limitación tiene muchas implicaciones y resulta útil considerar a foo en un contexto dimensional superior. numpy usa np.newaxis

 print(foo[np.newaxis, :]) [[1 2]] 

Pero este np.newaxis es solo azúcar sintáctica para None

 np.newaxis is None True 

Entonces, a menudo usamos None lugar porque es menos caracteres y significa lo mismo

 print(foo[None, :]) [[1 2]] 

Ok, veamos que más podríamos haber hecho. Note que usé el ejemplo con None en la primera posición, mientras que OP usa la segunda posición. Esta posición especifica qué dimensión se extiende. Y podríamos haber llevado eso más lejos. Deja que estos ejemplos ayuden a explicar

 print(foo[None, :]) # same as foo.reshape(1, 2) [[1 2]] 

 print(foo[:, None]) # same as foo.reshape(2, 1) [[1] [2]] 

 print(foo[None, None, :]) # same as foo.reshape(1, 1, 2) [[[1 2]]] 

 print(foo[None, :, None]) # same as foo.reshape(1, 2, 1) [[[1] [2]]] 

 print(foo[:, None, None]) # same as foo.reshape(2, 1, 1) [[[1]] [[2]]] 

Tenga en cuenta qué dimensión es cuál cuando numpy imprime la matriz

 print(np.arange(27).reshape(3, 3, 3)) dim2 ────────⇀ dim0 → [[[ 0 1 2] │ dim1 [ 3 4 5] │ [ 6 7 8]] ↓ ────────⇀ → [[ 9 10 11] │ [12 13 14] │ [15 16 17]] ↓ ────────⇀ → [[18 19 20] │ [21 22 23] │ [24 25 26]]] ↓