Quiero crear una lista que contenga índices que se usarían para obtener elementos de otra lista.
Un caso sencillo:
A = [5,6,7,8,9,10] b = 2:4Entonces quiero hacer algo como
C = A[b]Lo que sería como decir C = A[2:4]
Más adelante quiero extender esto a arreglos multidimensionales, donde, por ejemplo, b = [2:4, 5:6] y simplemente puedo llamar a A[b] para extraer un arreglo multidimensional de A.
Puede definir b como un slice de división para lograr esto:
In[9]: A = [5,6,7,8,9,10] b = slice(2,4) A[b] Out[9]: [7, 8] Con respecto a su otro requisito, creo que si crea un objeto de lista que contiene 2 objetos de slice , entonces debería lograr lo que desea:
In[18]: import numpy as np a = np.arange(100).reshape(10,10) b = [slice(1,3), slice(3,4)] a[b] Out[18]: array([[13], [23]])Puede usar python directo usando, por ejemplo, slice:
>>> A = [5,6,7,8,9,10] >>> b = slice(2,4) >>> A[b] [7, 8] Pero esto no se adapta muy bien a nd-arrays. Para hacer esto, recomendaría usar la función np.s_ de np.s_ que hace exactamente lo que está buscando, sin la necesidad de construir explícitamente un slice para cada eje.
>>> b = np.s_[2:4] >>> A[b] [7, 8]Esto se extiende muy bien a, por ejemplo, matrices 2d:
>>> A = np.ones(10, 10) >>> b = np.s_[2:4, 5:6] >>> A[b] array([[ 1.], [ 1.]])