Numpy: TypeError: no se puede lanzar ufunc agregar salida de dtype ('float64') a dtype ('uint8') con la regla de conversión 'same_kind'

Creado en 10 feb. 2016  ·  10Comentarios  ·  Fuente: numpy/numpy

Estoy usando la biblioteca de Gizeh y obtengo el error anterior al instalar la última versión de Numpy. No hubo ningún error con la versión 1.08 de Numpy.

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 una solución alternativa o solucionaría este problema, por favor?

Comentario más útil

Por lo general, este es un código como a += b y debe convertirlo en np.add(a, b, out=a, casting="unsafe") (si está seguro de que desea el comportamiento de transmisión inseguro. O, a menos que b sea enorme y sea seguro, tal vez solo envíe b primero.

Todos 10 comentarios

Necesita hacer el reparto explícito usando el argumento casting en el np.add ufunc. El comportamiento del que depende Gizeh ha quedado obsoleto desde la versión 1.7.

Eso es casting='unsafe' .

¿Dónde debo cambiar esto @charris ?

Por lo general, este es un código como a += b y debe convertirlo en np.add(a, b, out=a, casting="unsafe") (si está seguro de que desea el comportamiento de transmisión inseguro. O, a menos que b sea enorme y sea seguro, tal vez solo envíe b primero.

Entiendo que estaba hablando específicamente de los cambios que se realizarán en gizeh / moviepy.

En mi caso, tuve un problema similar. Se resolvió como lo sugirió seberg. Reemplacé la línea 40 en gizeh.py:

arr += image.flatten()

con línea:

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

Espero que esto ayude a alguien más.

Tuve este problema al _subtracting_ así:
yn -= self.y_mean

Mi error desapareció cuando hice la resta a través de numpy.subtract , así:
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")

Muchas gracias @seberg : +1:

@ FilipSavic95 : También podría hacer yn -= self.y_mean.astype(yn.dtype)

@ eric-wieser Sí, acabo de probar tu solución y funciona. Gracias por publicarlo. : +1:

La pregunta es qué precisión desea utilizar para la operación en sí. la colada insegura hará la operación con la precisión mayor (dcha.) (o el tipo d seguro combinado) la otra opción hará la colada y por lo tanto la operación con la precisión más baja.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

manuels picture manuels  ·  3Comentarios

thouis picture thouis  ·  4Comentarios

Foadsf picture Foadsf  ·  3Comentarios

inducer picture inducer  ·  3Comentarios

perezpaya picture perezpaya  ·  4Comentarios