Использовать переменную для указания диапазона индекса
Я хочу создать список, содержащий индексы, которые будут использоваться для получения элементов из другого списка.
Простой случай:
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.]])