首页 > 解决方案 > 基于最小距离的点身份的时间链接

问题描述

与之前的问题相关联,在该问题中我更普遍地要求根据最近距离找到最佳的唯一邻居对,我现在正试图将其适应更具体的情况,即我需要随着时间的推移链接点身份。

问题:如何根据最小距离随时间优化链接点身份?

通过跟踪,随着时间的推移,我获得了一系列对象(我的情况 ~2-10)的 x 和 y 坐标。当对象移动小步时,相对于对象之间的距离,应该可以基于当前时间步长和前一个时间步长的点之间的最近距离,以相当高的确定性将对象的身份随时间联系起来。

数据如下所示:

prevdat = {'id': [0, 1, 2], 'loc': [(300, 200), (425, 400), (400, 300)]}
currlocs = [(435, 390), (405, 295), (440, 330), (290, 215)]`

一些考虑:

  1. 多个积分不能分配给同一个身份
  2. 如果两点距离前一个点最近,则应考虑它们的绝对距离
  3. 点有时与最近的前一个邻居具有相同的距离(但不太可能与第二、第三最近邻居等)
  4. 有时当前点数和先前点数不相等
  5. 阈值变量提供了可能的最大 nr 个身份。如果超过了,分配给以前的身份后剩下的额外点应该是 nan

在上面的示例中,应该为 currlocs 指定身份[1,2,3,0][1,2,nan,0]in case maxidentities = 3

如果两个数据集在时间上没有时间链接,这个问题将是相似的,但是例如将点分类在两个不同的组中,其中应该从每个组中创建点对。

可能进一步改善链接的上述扩展是采取进一步措施,例如所有 pt 身份的多个先前时间步长与当前点之间的平均向量。数据看起来像:

from collections import deque
prevdat = {0: {'id': 0, 'loc': deque([(200,300),(210,305),(220,305),(225,310)])}, 
           1: {'id': 1, 'loc': deque([(350,250),(340,255),(335,260),(330,260)])},
           2: {'id': 2, 'loc': deque([(250,250),(240,250),(230,250)])},
           3: {'id': 3, 'loc': deque([(500,50),(480,70),(470,80),(450,85)])}}
currlocs = [(325,265),(430,90),(230,310),(220,255)]

标签: pythoncoordinatesdistance

解决方案


推荐阅读