Я хотел бы нарезать массив со смещением от конца, но я хотел бы иметь возможность включать конец.
import numpy as np
a = np.arange(10)
b = np.zeros_like(a)
for i in range(10):
b[:-i] += a[i:]
print(b)
За исключением случаев, когда i==0
, это работает просто хорошо. Тем не менее, попытка индексации b[:-0]
возвращает пустой список и вызывает ValueError: operands could not be broadcast together with shapes (0,) (10,) (0,)
Я могу обойти это следующим образом:
import numpy as np
a = np.arange(10)
b = np.zeros_like(a)
for i in range(10):
b[:(-i if i else None)] += a[i:]
print(b)
дает мне ожидаемый результат:
[45 45 44 42 39 35 30 24 17 9]
Я мог бы создать объект slice
напрямую, но объект slice
также ожидает None
, когда желателен конец массива.
Мой вопрос таков: есть ли более элегантный способ нарезать массив с конца (т. е. с отрицательным индексированием), в то же время потенциально включая конечный элемент, не прибегая к условному выражению для обработки i=0
case?