Numpy: TypeError: невозможно преобразовать ufunc add output из dtype ('float64') в dtype ('uint8') с правилом преобразования 'same_kind'

Созданный на 10 февр. 2016  ·  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 не является огромным и безопасным, может быть, просто приведите б сначала.

Все 10 Комментарий

Вам нужно сделать приведение явным, используя аргумент 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), другой вариант выполнит приведение и, следовательно, операцию с более низкой точностью.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги