NumPy: некоторые операторы не работают, когда __array_ufunc __ = нет в массивоподобном классе - PullRequest
0 голосов
/ 13 декабря 2018

Я следовал этому руководству по реализации объектов, которые могут взаимодействовать с np.ndarray через бинарные операторы, такие как +, -, * и т. Д. *

Как рекомендовано для моего случая, я установил __array_ufunc__ = None и реализовал бинарные операции, такие как __mul__ и __div__.Однако в этих примерах __mul__ работает, а __div__ - нет.

Вот MWE:

import numpy as np

class ArrayLike(object):
    __array_ufunc__ = None
    def __mul__(self, other):
       return 'mul'
    def __div__(self, other):
       return 'div'

array = np.arange(3)
npnum = np.float32(2.0)
alike = ArrayLike()

alike * array # 'mul'
alike / array # '*** TypeError: operand 'ArrayLike' does not support ufuncs (__array_ufunc__=None)'
alike * npnum # 'mul'
alike / npnum # '*** TypeError: operand 'ArrayLike' does not support ufuncs (__array_ufunc__=None)'

1 Ответ

0 голосов
/ 13 декабря 2018

Добро пожаловать в переполнение стека!

import numpy as np

class ArrayLike(object):
    __array_ufunc__ = None
    def __mul__(self, other):
       return 'mul'
    def __truediv__(self, other):
       return 'div'

array = np.arange(3)
npnum = np.float32(2.0)
alike = ArrayLike()
alike / npnum # 'div'

Обратите внимание, что я использую __truediv__ вместо __div__.__div__ не является допустимым оператором магического метода для Python 3, только для Python 2.

Для получения дополнительной информации см. Операторы Python 3

Если это отвечает вашимвопрос, обязательно отметьте его как ответ.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...