从Scipy导入的空间包(spatial)可以测量指定点之间的欧几里得距离。是否可能使用Delaunay包返回相同的测量结果?使用下面的df,按Time分组测量所有点之间的平均距离。然而,我希望使用Delaunay三角剖分来测量平均距离。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import Delaunay
df = pd.DataFrame({
'Time' : [1,1,1,1,2,2,2,2],
'A_X' : [5, 5, 6, 6, 4, 3, 3, 4],
'A_Y' : [5, 6, 6, 5, 5, 6, 5, 6],
})
def make_points(x):
return np.array(list(zip(x['A_X'], x['A_Y'])))
points = df.groupby("Time").apply(make_points)
for p in points:
tri = Delaunay(p)
ax.triplot(*p.T, tri.simplices)
可以使用以下方法来测量所有点之间的平均距离,但我希望加入Delaunay。
avg_dist = (df.groupby(['Time'])
.apply(lambda x: spatial.distance.pdist
(np.array(list(zip(x['A_X'], x['A_Y']))))
.mean() if len(x) > 1 else 0)
.reset_index()
)
预期输出:
Time 0
0 1 1.082842
1 2 1.082842
edges_with_no_replacement
函数现在可以处理仅有两个唯一点的情况。但请注意,如果这些点在同一直线上,该函数仍会引发错误。 - meTchaikovskyDelaunay
就无法找到三角形(毕竟没有三角形)。如果您的数据集中有这样的点,您也会收到QhullError
。 - meTchaikovsky