У меня есть класс (MyClass
) с атрибутом data
, который является массивом Numpy.Я хотел бы разрешить такие операции, как:
myclass3 = myclass1 + myclass2
myclass3 = myclass1 + Numpy.ndarray
myclass3 = Numpy.ndarray + myclass1
, где все эти операции складывают данные вместе и возвращают новый MyClass.Итак, первые два легко использовать, определив add ().Но в последнем случае он вел себя не так, как я ожидал, когда ndarray передает элемент один за другим с суммой myclass1.data
.
Это то, что я имею в виду.
import numpy as np
class MyClass:
def __init__(self, data):
self.data = data
def __add__(self, other):
print(other)
if isinstance(other, MyClass):
data = self.data + other.data
else:
data = self.data + other
return MyClass(data)
def __radd__(self, other):
print(other)
data = self.data + other
return MyClass(data)
myclass1 = MyClass(np.arange(5))
myclass2 = MyClass(np.ones(5))
nparray = np.arange(5) + 10
alist = [1, 1, 1, 1, 1]
Во всех комбинациях сложения все они в порядке, даже alist + myclass1
, но nparray + myclass1
возвращает:
In __radd__: 10
In __radd__: 11
In __radd__: 12
In __radd__: 13
In __radd__: 14
Случилось так, что каждый элемент массива Numpy былперешел в радд один за другим, а не в целом.И он возвращается пять раз, и я получил res
как <class 'numpy.ndarray'>
, а не MyClass
объект.
Так как я могу разрешить Numpy.ndarray + MyClass
операцию, когда весь ndarray будет проходить как другой в радд ().
С наилучшими пожеланиями, J