Есть ли элегантный способ предотвратить попадание dumpy dtype в пустые списки? - PullRequest
0 голосов
/ 01 июня 2019

Рассмотрим следующий пример, который может показаться глупым, но на самом деле является урезанной версией раздражения в реальном мире:

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]

но мне было интересно, есть ли более элегантное решение.

1 Ответ

0 голосов
/ 02 июня 2019

Просто хотел поделиться тем, ради чего я пошел в конце.По крайней мере, это коротко:

for i in reversed(range(5)):
    a[:i] += b[:i] or 0

a
# array([0, 3, 4, 3, 0])
...