Я использую библиотеку 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'
Есть ли обходной путь или вы не могли бы исправить эту проблему, пожалуйста?
Вам нужно сделать приведение явным, используя аргумент casting
в np.add
ufunc. Поведение, от которого зависит Гиза, устарело с версии 1.7.
Это casting='unsafe'
.
где мне изменить этот @charris ?
Обычно это код, такой как a += b
и вам нужно сделать его np.add(a, b, out=a, casting="unsafe")
(если вы уверены, что хотите небезопасное поведение при приведении. Или, если b не является огромным и безопасным, может быть, просто приведите б сначала.
Я понимаю, что говорил специально об изменениях, которые нужно внести в gizeh / moviepy.
В моем случае у меня была аналогичная проблема. Это было решено так, как предполагал Себерг. Я заменил строку 40 в gizeh.py:
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 не является огромным и безопасным, может быть, просто приведите б сначала.