【发布时间】:2022-01-21 00:16:15
【问题描述】:
早上好。 我有一个包含近 130 万行的数据库(月球陨石坑数据库),我想对较大陨石坑内的陨石坑进行聚类。为此,我将数据库从大到小排序,而不是在其他数据库上迭代更大,以计算位置之间的距离在直径内。问题是这个计算每个陨石坑大约需要 50 秒,因此计算所有 DB 需要几个月的时间。我尝试了一些替代技术,如 Dask、Multiprocessing,但没有奏效。任何人都可以帮助我。
cluster = 1
for i in range(len(craters_diam)):
start2 = datetime.now()
if craters_diam.loc[i, 'CLUSTER'] == 0:
craters_diam.loc[i, 'CLUSTER'] = cluster
lat1 = craters_diam.loc[i, 'LAT_CIRC_IMG']
lon1 = craters_diam.loc[i, 'LON_CIRC_IMG']
diam = craters_diam.loc[i, 'DIAM_CIRC_IMG']
for j in range(i+1, len(craters_diam)):
if craters_diam.loc[j, 'CLUSTER'] == 0:
lat2 = craters_diam.loc[j, 'LAT_CIRC_IMG']
lon2 = craters_diam.loc[j, 'LON_CIRC_IMG']
dist = distance(lat1, lat2, lon1, lon2)
if dist <= diam/2:
craters_diam.loc[j, 'CLUSTER'] = cluster
cluster += 1
print(datetime.now() - start2)
print(datetime.now() - start)
球面几何中的距离函数计算。
如果有人知道一个聪明(更快)的方法,谢谢!!!
【问题讨论】:
标签: python performance loops cluster-computing distance