我有以下顺序代码:
c = []
for ind, a in df.iterrows():
for ind, b in df.iterrows():
if a.hit_id < b.hit_id :
c.append(dist(a, b))
c = numpy.array(c)
但是数据框中的行数接近 10 6。因此,我想以某种方式加快此操作。我正在考虑将 dask 与 group by 一起使用。以下是我的方法:
@dask.delayed
def compute_pairwise_distance(val1, val2):
for i1 in val1:
for i2 in val2:
dist = np.sqrt(np.square(i1.x-i2.x) + np.square(i1.y-i2.y) + np.square(i1.z - i2.z))
gV.min_dist = min(gV.min_dist, dist)
gV.max_dist = max(gV.max_dist, dist)
def wrapper():
gV.grouped_df = gV.df_hits.groupby('layer_id')
unique_groups = gV.df_hits['layer_id'].compute().unique()
results = []
for gp1 in unique_groups:
for gp2 in unique_groups:
if gp1 < gp2 :
y = delay(compute_pairwise_distance)(gV.grouped_df.get_group(gp1), gV.grouped_df.get_group(gp2))
results.append(y)
results = dask.compute(*results)
wrapper()
print(str(gV.max_dist) + " " +str(gV.min_dist))
我不知道为什么,但我遇到了一个关键错误KeyError: 'l'
。这也是使用 dask 的正确方法。