Numpy: TypeError : impossible de convertir ufunc ajouter la sortie de dtype('float64') à dtype('uint8') avec la règle de conversion 'same_kind'

Créé le 10 févr. 2016  ·  10Commentaires  ·  Source: numpy/numpy

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?

Commentaire le plus utile

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.

Tous les 10 commentaires

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.

Cette page vous a été utile?
0 / 5 - 0 notes