У меня есть список slices
, и я использую их для индексации массива numpy
.
arr = np.arange(25).reshape(5, 5)
# array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14],
# [15, 16, 17, 18, 19],
# [20, 21, 22, 23, 24]])
slice_list = list(map(lambda i: slice(i, i+2), [1, 2]))
# [slice(1, 3, None), slice(2, 4, None)]
print(arr[slice_list])
# == arr[1:3, 2:4]
# [[ 7 8]
# [12 13]]
Это нормально работает, но ломается, если у меня меньше кусков, чем количество измерений массива Я хочу индексировать.
arr3d = arr[np.newaxis, :, :] # dims: [1, 5, 5]
arr3d[:, slice_list]
# IndexError: only integers, slices (`:`), ellipsis (`...`),(`None`)
# numpy.newaxis and integer or boolean arrays are valid indices
Однако работают следующие примеры:
arr3d[:, slice_list[0], slice_list[1]]
arr3d[[slice(None)] + slice_list]
arr3d[:, [[1], [2]], [2, 3]]
Можно ли использовать список фрагментов для индексации массива с большим количеством измерений. Я хочу сделать что-то вроде:
arr[..., slice_list]
arr[..., slice_list, :]
arr[:, slice_list, :]
, не думая о размерах массива и не выясняя, сколько [slice(None)]*X
мне нужно набить с обеих сторон моего slice_list
.