找到最接近一组3D路径的所有其他路径的路径

时间:2018-01-24 09:51:21

标签: r dtw

我正在尝试编写一种算法,用于查找最接近一组3D路径中所有其他路径的3D路径。如果你看一下(在底部)提供的链接中的图形,它应该输出trace1。 (通过观察它)

为了能够对路径的相似性进行比较,我使用动态时间规整(DTW)计算了每个轴的路径的路径成本,并且组中的每个其他路径都给出了以下数据帧:

   from to         x         y         z
1     1  2 2.2460834 2.3350118 0.9898763
2     1  3 4.0703514 3.2873548 1.7424783
3     1  4 3.1386396 3.1925206 2.7434982
4     1  5 2.3475482 3.4232058 1.3965482
5     1  6 2.2899544 2.0498909 1.2892379
6     1  7 2.9042872 2.6445606 0.7676169
7     1  8 1.5259118 1.5580012 1.1033320
8     1  9 2.1399503 1.6253582 0.8797432
9     1 10 4.0400429 1.8293614 2.0989448
10    2  1 2.2460834 2.3350118 0.9898763
11    2  3 1.4793632 1.0747873 1.2075596
12    2  4 1.1333285 1.5574448 1.7058433
13    2  5 0.7593649 1.1794035 1.0677958
14    2  6 0.6467899 0.4950420 0.8100349
15    2  7 0.7879115 0.6047349 1.0033941
...
90   10  9 1.929852 0.4064518 1.669125

从这个数据帧中,我需要路径,它对大多数路径具有最低值。

它可能是一个相当简单的解决方案,但毕竟3D翻译和旋转数学解决方案使我无法解决。

Link to the graph & data I am processing< - 您只需点击十字架即可关闭注册窗口

1 个答案:

答案 0 :(得分:0)

我通过总结轴DTW分析的个别成本,将这些分数与来自相同路径原点的其他分数进行排序,然后总结每个路径组的排名来解决问题。具有最低累积排名的度量最接近于每个其他路径。

结论:trace1是最常用的路径,在共享的第二个点上有5个和6个。

代码:

#add accumulative score
classification <- classification %>% mutate(score = classification$x + classification$y + classification$z)    

#rank by accumulative score, add ranking to the dataframe
classification$ranking <- vector(length = nrow(classification))
for (i in unique(classification$from)) {
  classificationGroup <- classification[classification$from == i,]
  classificationGroup <- classificationGroup[order(classificationGroup$score),]

  for (ii in 1:nrow(classificationGroup)){
    classification[classification$to == classificationGroup[ii,]$to & classification$from == classificationGroup[ii,]$from,]$ranking <- ii
  }
}    

combinedrankingdf <- data.frame(measurement = vector(length = length(unique(classification$to))), accumulativeRank = vector(length = length(unique(classification$to))))
for (i in 1:nrow(combinedrankingdf)){
  combinedrankingdf$measurement[i] <- i
  combinedrankingdf$accumulativeRank[i] <- sum(classification[classification$to == i,]$ranking)
}    

注意:“分类”是问题中描述的数据框。

结果输出:

   measurement accumulativeRank
2            2               25
6            6               26
7            7               26
9            9               35
8            8               37
5            5               43
3            3               57
10          10               59
4            4               66
1            1               76
相关问题