Numpy: 类型错误:无法将 ufunc add 输出从 dtype('float64') 转换为 dtype('uint8') 与转换规则'same_kind'

创建于 2016-02-10  ·  10评论  ·  资料来源: numpy/numpy

我正在使用 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'

有没有解决方法,或者你会解决这个问题吗?

最有用的评论

通常这是a += b ,您需要将其设置np.add(a, b, out=a, casting="unsafe") (如果您确定想要不安全的强制转换行为。或者,除非 b 很大并且它是安全的,否则可能只是强制转换b 首先。

所有10条评论

您需要使用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)进行操作,另一个选项将进行转换,从而以较低的精度进行操作。

此页面是否有帮助?
0 / 5 - 0 等级