Использовать переменную для указания диапазона индекса

Я хочу создать список, содержащий индексы, которые будут использоваться для получения элементов из другого списка.

Простой случай:

A = [5,6,7,8,9,10]    
b = 2:4  

Я хочу сделать что-то вроде

C = A[b]

Который хотел бы сказать C = A [2: 4]

Я хочу позже распространить это на многомерные массивы, где, например, b = [2: 4, 5: 6], и я могу просто вызвать A [b], чтобы извлечь многомерный массив из A.

Ответ 1

Вы можете определить b как объект slice для достижения этого:

In[9]:
A = [5,6,7,8,9,10]    
b = slice(2,4)
A[b]

Out[9]: [7, 8]

Что касается вашего другого требования, я думаю, что если вы создадите объект списка, содержащий 2 объекта slice то он должен достичь того, чего вы хотите:

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

Ответ 2

Вы можете использовать прямой питон, используя, например, slice:

>>> A = [5,6,7,8,9,10]    
>>> b = slice(2,4)
>>> A[b]
[7, 8]

Но это не очень хорошо масштабируется для nd-массивов. Чтобы сделать это, я бы рекомендовал использовать функцию numpy np.s_ которая делает именно то, что вы ищете, без необходимости явного построения slice для каждой оси.

>>> b = np.s_[2:4]
>>> A[b]
[7, 8]

Это хорошо распространяется на, например, 2d массивы:

>>> A = np.ones(10, 10)
>>> b = np.s_[2:4, 5:6]
>>> A[b]
array([[ 1.],
       [ 1.]])