numpy.unravel_index() toma una forma y un índice plano en una matriz, y devuelve la tupla que representa ese índice en la matriz. ¿Hay un inverso? Puedo calcularlo a mano, pero parece que debe ser una función incorporada en alguna parte ...¿Tiene NumPy un inverso de unravel_index()?
Respuesta
Desde numpy 1.6.0
(mayo de 2011) no es una función integrada de NumPy ravel_multi_index
Convierte una tupla de matrices de índice en una matriz de índices planos, aplicando modos de límites a la multi-índice.
(Esto también es mencionado en un comentario por el usuario Bi Rico, pero realmente debería aparecer como una respuesta)
La respuesta está en numpy.ndarray.strides. Ver http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.strides.html
No fiable. Cuando toma segmentos de matrices, Numpy a menudo comparte los mismos datos y hace trucos de zancadas. Compara arange (15) .reshape ((3,5)). Strides (esta será una buena matriz contigua) y arange (35) .reshape ((7,5)) [1 :: 2,:]. Strides . –
Es cierto, y la falta de visibilidad en eso puede ser un verdadero dolor. Pero si estás planeando hacer tus propios trucos (como estuve aquí), con suerte puedes garantizar que el conjunto sea contiguo. – D0SBoots
Esto funciona:
def ravel_index(pos, shape):
res = 0
acc = 1
for pi, si in zip(reversed(pos), reversed(shape)):
res += pi * acc
acc *= si
return res
No está construido en un comando, pero siempre he utilizado el siguiente fragmento, suponiendo que se utiliza por defecto la indexación por filas de numpy:
np.sum(np.array(index_tuple[:-1])*np.array(a_matrix.shape[1:]))+np.array(index_tuple[-1])
a igual Fortan indexación (columna-principal), los índices sólo tiene que ser intercambiado:
np.sum(np.array(index_tuple[1:])*np.array(a_matrix.shape[:-1]))+np.array(index_tuple[0])
En lo anterior, index_tuple y a_matrix son una tupla que contiene los índices de interés y la matriz que se indexa, respectivamente. Esto no tiene el problema anterior asociado con zancadas cuando se toman rodajas.
A partir de numpy 1.6 es un comando integrado 'numpy.ravel_multi_index', http://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel_multi_index.html pero esta pregunta es bastante antigua. –
Gracias, no había notado el nuevo comando, así que esto es muy útil para mí. –
- 1. ¿Tiene cada relación de datos centrales tener un inverso?
- 2. ¿Hay un inverso de System.Diagnostics.ConditionalAttribute?
- 3. Proxy inverso
- 4. ¿Cómo configurar un Proxy inverso de Squid?
- 5. WebDAV detrás de un proxy inverso
- 6. Retransmisor de flujo inverso
- 7. inverso de COALESCE
- 8. Inverso de jQuery.extend (true, ...)
- 9. Desplazamiento inverso en Chromebook
- 10. Monitor de túnel SSH inverso
- 11. carga numpy plantea "AttributeError: 'módulo' objeto no tiene atributo 'expr'"
- 12. Clon de Git a través de un túnel inverso
- 13. Usando el Fiddler como un proxy inverso
- 14. Añadir un servidor proxy inverso para heroku
- 15. Cómo proteger un servidor web DE un servidor proxy inverso
- 16. Groovy teclas de mapa inverso
- 17. El proceso inverso de descortezamiento
- 18. Inverso del cual
- 19. IIS como proxy inverso
- 20. lighttpd como proxy inverso
- 21. ggplot2 orden inverso de scale_brewer
- 22. Inverso de OfType in Linq?
- 23. Python inverso de una matriz
- 24. Atributo inverso en NHibernate
- 25. Subcadena con índice inverso
- 26. parche xdelta inverso
- 27. Django OneToOne acceso inverso
- 28. Patrón de bit inverso en C
- 29. sesiones express.js con proxy inverso
- 30. Ruby equivalente de NumPy
Creo que debería actualizar la respuesta aceptada para el uso de 'ravel_multi_index'; la mayoría de la gente usará 'NumPy 1.6' o más reciente por ahora. – gerrit