Нарезка на смещение от конца массива, где смещение может быть 0 - PullRequest
1 голос
/ 09 января 2020

Я хотел бы нарезать массив со смещением от конца, но я хотел бы иметь возможность включать конец.

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?

...