我是python新手。我正在使用dbscan
代码对一些改变。现在代码运行良好,但速度非常慢。所以我发现我必须从我的代码。这里是代码的一部分:
class Point:
def __init__(self, x = 0, y = 0, visited = False, isnoise = False):
self.x = x
self.y = y
self.visited = False
self.isnoise = False
def show(self):
return self.x, self.y
def dist(self, p1, p2):
#Calculate the great circle distance between two points on the earth (specified in decimal degrees)return distance between two point
# convert decimal degrees to radians
dlat = radians(p2.x-p1.x)
dlon = radians(p2.y-p1.y)
a = sin(dlat/2) * sin(dlat/2) + cos(radians(p1.x))* cos(radians(p2.x)) * sin(dlon/2) * sin(dlon/2)
c = 2 * atan2(sqrt(a), sqrt(1-a))
d = 6371 * c
return d
def distanceQuery(self,neighbor_pts):
dista=[]
for i in range(len(neighbor_pts)):
for j in range(i+1,len(neighbor_pts)):
z=self.dist(neighbor_pts[i],neighbor_pts[j])
dista.append(z)
return max(dista)
distanceQuery
函数正在使用double for循环。我有什么办法可以把这个去掉吗?我能把这个双循环矢量化吗?由于这是群集代码,因此需要附加一些步骤。我已经读过,numpy数组的工作方式与python list的工作方式不同。附加numpy数组效率低下。在
所以可以向量化。但这是代码的另一部分,在这里,我检查了某些条件,然后进行了附加。在
^{pr2}$现在如果我也向量化相邻点。我要解决附加的问题?所以每个点都将附加到neighbour_points
中,然后它将生成一个distanceQuery
。这个过程也是迭代的一部分。所以这里也有两个循环,我只想确保在numpy数组中追加不会效率低下
例如:
^{pr2}$时间安排:
然后:
你可以用numpy ufunc以“向量”的形式做任何事情:
相关问题 更多 >
编程相关推荐