我有一个 Dataframe ,其中包含一系列对象随时间变化的x-y坐标。我试图计算出这些对象中每一个的总路径长度。我知道计算直线长度的公式。
(√((x2-x1))^2+(y2-y1))) + (√((x3 - x2))^2+(y3-y2)))...
如何计算出每个单独对象从数据框中经过的路径长度?提前感谢!
tct7dpnv1#
我不确定你所说的“每个单独对象路径的长度”到底是什么意思。如果你想把数据框中每两个连续点之间的距离相加,最后一个点连接到第一个点,使用如下的方法:
import math data = {"x": [0,2,6,4,0,3,6] "y": [0,4,2,3,4,1,7] } df = pd.DataFrame(data) points = list(df.to_records(index=False)) total_length = sum(math.hypot(p[i][0] - p[i-1][0], p[i][1] - p[i-1][1]) for i,_ in enumerate(p)) print(total_length)
如果你想为2d点集找到一个2d船体(也就是最小边界多边形),可以使用scipy库。
from scipy.spatial import ConvexHull, convex_hull_plot_2d points_arr = np.array([[x,y] for x,y in points]) hull = ConvexHull(points_arr) import matplotlib.pyplot as plt plt.plot(points_arr[:,0], points_arr[:,1], 'o') hs = hull.simplices for simplex in hull.simplices: plt.plot(points_arr[simplex, 0], points_arr[simplex, 1], 'k-') total_length = sum(math.dist(hs[i], hs[i-1]) for i,_ in enumerate(hs)) print(total_length)
1条答案
按热度按时间tct7dpnv1#
我不确定你所说的“每个单独对象路径的长度”到底是什么意思。如果你想把数据框中每两个连续点之间的距离相加,最后一个点连接到第一个点,使用如下的方法:
如果你想为2d点集找到一个2d船体(也就是最小边界多边形),可以使用scipy库。