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]]] ↓