indexación en mgrid de numpy
yo suelonumpy.mgrid
para generar "matrices de índices de coordenadas"
y, x = np.mgrid[0:3, 0:2]
print x
array([[0, 1],
[0, 1],
[0, 1]])
En muchas situaciones, tomo parte de estos arreglos (por ejemplo,x[0, :]
) y descartar el resto de los datos. A veces, estos cortes son mucho más pequeños que los arreglos originales, que son costosos de calcular (es decir,np.mgrid[0:512, 0:512, 0:512]
). ¿Proporciona numpy un equivalente a[coord[view] for coord in np.mgrid[0:512, 0:512, 0:512]
¿Eso no genera grandes matrices intermedias?
Me doy cuenta de que la solución es trivial para el corte.[0,:]
, pero estoy buscando una solución general que maneje cualquier forma válida de indexar matrices numpy
Editar
Algunos han pedido ejemplos específicos para lo queview
podría parecerse a Idealmente, espero una solución general que maneje cualquier forma válida de indexar un ndarray. Aquí hay algunos ejemplos específicos para la matriz 3x2 de arriba:
1)view = (1, slice(None, None, 2))
2)view = (np.array([0,1]), np.array([0, 1]))
3)view = np.array([[False, False], [False, True], [False, False]])
Y estoy buscando una función como
def mgrid_with_view(array_shape, view)
...
Eso devuelve el equivalente de[o[view] for o in np.indices(array_shape)]
Sin computación ni memoria innecesaria.