代表一组功能的类的重载添加

时间:2019-04-10 19:39:00

标签: python arrays numpy

我正在创建一个类my_class,其唯一的实例变量是member,这是一个任意尺寸(N, 2)的维度为N的numpy数组。该类应该表示实函数的向量空间。如果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包含{{ 1}}。如果[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)) 的条目,这会很好。有没有更好的方法来实现这一目标?如果可能的话,我想坚持使用numpy数组,而不要使用字典。

0 个答案:

没有答案