Следуя инструкциям here Я создал подкласс ndarray, который добавляет новые атрибуты в класс ndarray. Теперь я хочу определить оператор сравнения для нового класса, который помимо сравнения данных также сравнивает значения атрибутов. Так что я попытался это:Сравнение классов ndarray
def __eq__(self, other):
return (self._prop1 == other._prop1) and \
(self._prop2 == other._prop2) and \
(self.data == other.data)
Это позволяет сравнивать как T1 == T2
и возвращает логическое значение. Однако, поскольку я хотел бы использовать эти массивы взаимозаменяемо с другими ndarrays, я бы хотел, чтобы сравнение возвращало булевский массив. Если я не определяю свою функцию __eq__
, тогда сравнение возвращает логический массив, но тогда я не могу проверить атрибуты. Как я могу объединить эти два?
Похож, что 'ndarray' возвращает скаляр True/False, если атрибуты (например, форма) не совпадают, а булевский массив - только если все они совпадают. С помощью одного или 'ifs' вы должны иметь возможность возвращать тесты атрибутов, если они терпят неудачу, а' else' возвращает тест 'data'. Позвольте себе несколько «возвратов». Так проще писать код. – hpaulj
@hpaulj, разделяющее сравнение моих пользовательских атрибутов и базовых данных, является хорошим предложением. Однако проблема в том, что сравнение самих атрибутов данных возвращает логическое, а не массив. Как я могу вызвать элементарное сравнение numpy с моим оператором сравнения? – deepak
Посмотрите, как маскированный массив обрабатывает это: 'np.ma.core.MaskedArray .__ eq__' – hpaulj