表示一组函数的类的重载加法

2024-05-19 12:51:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个类my_class,它的唯一实例变量是member,一个维数为(N, 2)的numpy数组,用于任何N。这个类应该表示实函数的向量空间。如果A.member看起来像

[[a_1, x_1], [a_2, x_2], ..., [a_N, x_N]]

然后A表示函数

f(x) = a_1 * k(x, x_1) + a_2* k(x, x_2) + ... + a_n * k(x, x_N)

其中k(x, y)是预先选择的函数。我想用常识的方式重载这个类的加法,这样如果A.member包含[a, x_0]并且B.member包含[b, x_0],那么(A + B).member包含[a + b, x_0]。如果A.member包含[a, x_0]B.member不包含x_0是第二个索引的对,则(A + B).member应该包含[a, x_0]。到目前为止,我实现了如下加法:

def __add__(self, other): 
    a = np.intersect1d(self.member[:,1], other.member[:,1], True, True)
    b = np.intersect1d(self.member[:,1], np.setdiff1d(self.member[:,1], a[0]),True, True)
    c = np.intersect1d(other.member[:,1], np.setdiff1d(other.member[:,1], a[0]),True, True)
    common = np.concatenate(((self.member[a[1],:][:,0] + other.member[a[2],:][:,0]).reshape(-1, 1), a[0].reshape(-1, 1)), 1)
    return my_class(np.concatenate((common, self.member[b[1],:], other.member[c[1],:]), 0))

我认为这是过于繁琐,写得不是很好。另外,目前我的代码没有删除[0, x_0]形式的条目,这很好。有没有更好的方法来实现这一点?如果可能的话,我希望使用numpy数组,而不是使用字典


Tags: 函数selfnumpytruemynp数组common