我正在使用 Gizeh 库,在安装最新版本的 Numpy 时出现上述错误。 Numpy 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'
有没有解决方法,或者你会解决这个问题吗?
您需要使用np.add
ufunc 中的casting
参数使转换显式。 自 1.7 以来,Gizeh 所依赖的行为已被弃用。
那是casting='unsafe'
。
我应该在哪里改变这个@charris ?
通常这是a += b
,您需要将其设置np.add(a, b, out=a, casting="unsafe")
(如果您确定想要不安全的强制转换行为。或者,除非 b 很大并且它是安全的,否则可能只是强制转换b 首先。
我知道我是在专门讨论要对 gizeh/moviepy 进行的更改。
就我而言,我遇到了类似的问题。 它已按照 seberg 的建议解决了。 我替换了 gizeh.py 中的第 40 行:
arr += image.flatten()
带线:
arr = np.add(arr, image.flatten(), out=arr, casting="unsafe")
我希望这对其他人有帮助。
我在 _subtracting_ 这样的时候遇到了这个问题:
yn -= self.y_mean
当我通过numpy.subtract进行减法时,我的错误消失了,如下所示:
yn = np.subtract(yn, self.y_mean, out=yn, casting="unsafe")
非常感谢@seberg :+1:
@FilipSavic95 :也可以做yn -= self.y_mean.astype(yn.dtype)
@eric-wieser 是的,我刚刚尝试了您的解决方案,并且有效。 感谢您发布它。 :+1:
问题是您要为操作本身使用哪种精度。 不安全的转换将以较大的 (rhs) 精度(或组合的安全 dtype)进行操作,另一个选项将进行转换,从而以较低的精度进行操作。
最有用的评论
通常这是
a += b
,您需要将其设置np.add(a, b, out=a, casting="unsafe")
(如果您确定想要不安全的强制转换行为。或者,除非 b 很大并且它是安全的,否则可能只是强制转换b 首先。