In [71]: slicer(np.arange(10),-2,2)
Out[71]: array([8, 9, 0, 1])
Похоже, np.r_
выполняет тот тип «броска», который вам нужен:
In [72]: np.arange(10)[np.r_[-2:2]]
Out[72]: array([8, 9, 0, 1])
In [73]: np.r_[-2:2]
Out[73]: array([-2, -1, 0, 1])
Могут быть различия между тем, что вы ожидаете, и тем, что делает r_
. Я позволю вам изучить его документы.
Просто потому, что вы называете это нарезкой, это не basic
индексация. Как бы то ни было, результатом является copy
, а не view
. И остерегайтесь любого вида расширения многомерной индексации.
Будьте осторожны при поиске замены на все случаи жизни. Использование отрицательного индекса для отметки с конца, без переноса, настолько глубоко внедрено в Python и numpy, что вы всегда должны предполагать, что это поведение по умолчанию.
In [77]: np.arange(10)[-2:2]
Out[77]: array([], dtype=int64)
Рассматривайте ваш упакованный / свернутый футляр как исключение, одно из которых требует особой обработки.