【发布时间】:2021-04-18 23:00:51
【问题描述】:
我是 OOP 新手,我很确定我即将解决问题的方法不是最聪明的。
我正在构建一个自定义 K-means 算法,并希望为不同的距离函数提供选项。
我要解决的方法是构建 if 语句并分别计算距离。
例如:
class ExampleDist():
def __init__(self, measure="euklid"):
self.measure = measure
def euklid_distance(x_1,x_2):
dist = np.linalg.norm(x_1-x_2)
return dist
def abs_distance(x_1,x_2):
dist = np.absolute(x_1-x_2)
return dist
def dist(self, x_1, x_2):
if(self.measure == "euklid"):
self.dist = euklid_distance(x_1,x_2)
elif(self.measure == "abs"):
self.dist = abs_distance(x_1,x_2)
dist1 = ExampleDist(measure = "euklid")
dist1.dist(np.array([1,1]),np.array([0,2]))
但是在 K-Mean 算法中,我必须复制粘贴整个循环,在该循环中计算数据点和质心之间的距离,并且只更改距离。
复制粘贴从来都不是一个好的解决方案,所以我希望有一个解决方案可以自动传递我想要使用的距离度量。 像这样(伪代码):
class ExampleDist():
def __init__(self, measure="euklid"):
self.measure = measure
def euklid_distance(x_1,x_2):
dist = np.linalg.norm(x_1-x_2)
return dist
def abs_distance(x_1,x_2):
dist = np.absolute(x_1-x_2)
return dist
def dist(self, x_1, x_2):
self.dist = [self.meassure]_distance(x_1,x_2)
dist1 = ExampleDist(measure = "euklid")
dist1.dist(np.array([1,1]),np.array([0,2]))
【问题讨论】:
标签: python class oop arguments parameter-passing