问题描述
我想使用欧氏距离对轨迹进行聚类。然而,组成轨迹的点数并不相同。所以我需要用相同数量的点来打破每个点并相应地计算它们。
例如,我有一个由一组 2D 点组成的轨迹(它们不在相同的间隔中)。
[(0.0,13.935130773499658),(0.9206715658615288,87.63458690840814),(1.2245818835622884,111.96041116227424),(1.6280390619875555,144.22535883207814),(2.4687774761711263,211.49397181142362),(2.8179447735365812,239.4273556006593),(3.2963389341232032,(4.527849090835078,(6.05237501176546,969.4543366873916),(7.427758223451998,(9.628371362150414,(15.369101289189876,3961.68816425364),(17.234838515477744,4861.421805491894),(18.400924281907635,(18.628546140914224,4879.631554212427),(18.778532556213293,4891.665691215202),(18.912718114201468,4902.404931114517),(19.051842229505283,4913.539707867735),(19.449597896390035,4944.813545621106),(19.841058908365085,4976.143225350869),(20.13926859147929,5000.0)]
它给出的散点图和折线图如下:
我想要做的是识别将整个轨迹分成相同长度的点。例如,30 分。我该怎么做?谢谢。
解决方法
你可以这样做
- 为每对连续的点生成点斜率形式
- 沿着它的某个轴选择值
for index in range(len(my_points) - 1):
(x1,y1),(x2,y2) = my_points[index:index + 1]
# _y = (y2 - y1) / (x2 - x1) * (_x - x1) + y1
您可以为这个位置生成一个匿名函数,但保留原始列表并即时生成可能更有用
如果你想在比点集小的范围内映射点集,那么你需要选择如何处理中间点,例如平均它们或总是选择一侧