Numpy: TypeError: Não é possível converter ufunc add output de dtype ('float64') para dtype ('uint8') com a regra de cast 'same_kind'

Criado em 10 fev. 2016  ·  10Comentários  ·  Fonte: numpy/numpy

Estou usando a biblioteca Gizeh e recebo o erro acima ao instalar a versão mais recente do Numpy. Não houve erro com o Numpy versão 1.08.

File "animation/target_animation.py", line 161, in draw
    fill = gizeh.ImagePattern(self.bg.data, self.bg.pos, filter='best')
  File "build/bdist.linux-x86_64/egg/gizeh/gizeh.py", line 295, in __init__
  File "build/bdist.linux-x86_64/egg/gizeh/gizeh.py", line 50, in from_image
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('uint8') with casting rule 'same_kind'

Existe uma solução alternativa ou você resolveria esse problema, por favor?

Comentários muito úteis

Normalmente, este é um código como a += b e você precisa torná-lo np.add(a, b, out=a, casting="unsafe") (se tiver certeza de que deseja o comportamento de elenco inseguro. Ou, a menos que b seja enorme e seja seguro, talvez apenas elenco b primeiro.

Todos 10 comentários

Você precisa tornar o elenco explícito usando o argumento casting no np.add ufunc. O comportamento do qual Gizeh depende está obsoleto desde 1.7.

Isso é casting='unsafe' .

onde devo mudar este @charris ?

Normalmente, este é um código como a += b e você precisa torná-lo np.add(a, b, out=a, casting="unsafe") (se tiver certeza de que deseja o comportamento de elenco inseguro. Ou, a menos que b seja enorme e seja seguro, talvez apenas elenco b primeiro.

Eu entendo que estava falando especificamente sobre as mudanças a serem feitas no gizeh / moviepy.

No meu caso, tive um problema semelhante. Foi resolvido conforme sugerido por seberg. Substituí a linha 40 em gizeh.py:

arr += image.flatten()

com linha:

arr = np.add(arr, image.flatten(), out=arr, casting="unsafe")

Espero que isso ajude mais alguém.

Eu tive este problema ao _subtracting_ assim:
yn -= self.y_mean

Meu erro foi embora quando fiz a subtração via numpy.subtract , assim:
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")

Muito obrigado @seberg : +1:

@ FilipSavic95 : Também poderia fazer yn -= self.y_mean.astype(yn.dtype)

@ eric-wieser Sim, acabei de tentar sua solução e funciona. Obrigado por postar. : +1:

A questão é qual precisão você deseja usar para a operação em si. o elenco inseguro fará a operação na precisão maior (rhs) (ou o tipo d seguro combinado) a outra opção fará o elenco e, portanto, a operação na precisão inferior.

Esta página foi útil?
0 / 5 - 0 avaliações