我正在创建一个类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数组,而不是使用字典
目前没有回答
相关问题 更多 >
编程相关推荐