J'utilise la bibliothèque Gizeh et j'obtiens l'erreur ci-dessus lors de l'installation de la dernière version de Numpy. Il n'y avait pas d'erreur avec Numpy version 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-t-il une solution de contournement ou voudriez-vous résoudre ce problème s'il vous plaît?
Vous devez rendre le cast explicite en utilisant l'argument casting
dans le np.add
ufunc. Le comportement dont dépend Gizeh est déprécié depuis la 1.7.
C'est casting='unsafe'
.
où dois-je changer ce @charris ?
Typiquement, il s'agit d'un code tel que a += b
et vous devez le faire np.add(a, b, out=a, casting="unsafe")
(si vous êtes sûr de vouloir le comportement de cast non sécurisé. Ou, à moins que b soit énorme et qu'il soit sûr, peut-être b en premier.
Je comprends que je parlais spécifiquement des modifications à apporter à gizeh/moviepy .
Dans mon cas, j'ai eu un problème similaire. Il a été résolu comme suggéré par Seberg. J'ai remplacé la ligne 40 dans gizeh.py :
arr += image.flatten()
avec ligne :
arr = np.add(arr, image.flatten(), out=arr, casting="unsafe")
J'espère que cela aide quelqu'un d'autre.
J'ai eu ce problème lors de la _soustraction_ comme ceci :
yn -= self.y_mean
Mon erreur a disparu lorsque j'ai fait la soustraction via numpy.subtract , comme ceci:
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")
Merci beaucoup @seberg :+1:
@FilipSavic95 : Pourrait aussi faire yn -= self.y_mean.astype(yn.dtype)
@eric-wieser Oui, je viens d'essayer votre solution et cela fonctionne. Merci de l'avoir posté. :+1:
La question est de savoir quelle précision vous souhaitez utiliser pour l'opération elle-même. le transtypage non sécurisé effectuera l'opération dans la plus grande précision (à droite) (ou le type de sécurité combiné), l'autre option effectuera le transtypage et donc l'opération dans la précision inférieure.
Commentaire le plus utile
Typiquement, il s'agit d'un code tel que
a += b
et vous devez le fairenp.add(a, b, out=a, casting="unsafe")
(si vous êtes sûr de vouloir le comportement de cast non sécurisé. Ou, à moins que b soit énorme et qu'il soit sûr, peut-être b en premier.