Рассмотрим следующий пример, который может показаться глупым, но на самом деле является урезанной версией раздражения в реальном мире:
import numpy as np
a = np.zeros(5, int)
b = [*range(5)]
for i in reversed(range(5)):
a[:i] += b[:i]
# Traceback (most recent call last):
# File "<stdin>", line 2, in <module>
# TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'
Это исключение возникает на последней итерации, потому что numpy больше не может определить правильный тип d в списке rhs.
Конечно, легко проверить наличие пустых операндов
for i in reversed(range(5)):
if b[:i]:
a[:i] += b[:i]
но мне было интересно, есть ли более элегантное решение.