Numpy: TypeError: ufunc kann nicht umgewandelt werden, um die Ausgabe von dtype('float64') zu dtype('uint8') mit der Casting-Regel 'same_kind' hinzuzufügen

Erstellt am 10. Feb. 2016  ·  10Kommentare  ·  Quelle: numpy/numpy

Ich verwende die Gizeh-Bibliothek und erhalte den obigen Fehler bei der Installation der neuesten Version von Numpy. Bei Numpy Version 1.08 ist kein Fehler aufgetreten.

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'

Gibt es einen Workaround oder würden Sie dieses Problem bitte beheben?

Hilfreichster Kommentar

Normalerweise ist dies Code wie a += b und Sie müssen ihn zu np.add(a, b, out=a, casting="unsafe") (wenn Sie sicher sind, dass Sie das unsichere Cast-Verhalten wollen. Oder, es sei denn, b ist riesig und es ist sicher, vielleicht einfach casten b zuerst.

Alle 10 Kommentare

Sie müssen die Besetzung explizit machen, indem Sie das casting Argument in der np.add ufunc verwenden. Das Verhalten, von dem Gizeh abhängt, ist seit 1.7 veraltet.

Das ist casting='unsafe' .

Wo soll ich das @charris ändern?

Normalerweise ist dies Code wie a += b und Sie müssen ihn zu np.add(a, b, out=a, casting="unsafe") (wenn Sie sicher sind, dass Sie das unsichere Cast-Verhalten wollen. Oder, es sei denn, b ist riesig und es ist sicher, vielleicht einfach casten b zuerst.

Ich verstehe, dass ich speziell über die Änderungen an gizeh/moviepy gesprochen habe.

In meinem Fall hatte ich ein ähnliches Problem. Es wurde wie von seberg vorgeschlagen gelöst. Ich habe Zeile 40 in gizeh.py ersetzt:

arr += image.flatten()

mit Linie:

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

Ich hoffe, das hilft jemand anderem.

Ich hatte dieses Problem beim _subtrahieren_ wie folgt:
yn -= self.y_mean

Mein Fehler verschwand , als ich die Subtraktion über folgt :
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")

Vielen Dank @seberg :+1:

@FilipSavic95 : Könnte auch yn -= self.y_mean.astype(yn.dtype)

@eric-wieser Ja, ich habe deine Lösung gerade ausprobiert und sie funktioniert. Danke, dass du es gepostet hast. :+1:

Die Frage ist, welche Präzision Sie für die Operation selbst verwenden möchten. der unsichere Guss führt die Operation mit der größeren (rhs) Präzision (oder dem kombinierten sicheren dtype) aus, die andere Option führt den Guss und damit die Operation mit der niedrigeren Präzision durch.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen