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?
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.
Hilfreichster Kommentar
Normalerweise ist dies Code wie
a += b
und Sie müssen ihn zunp.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.