我有一个数据集描述了以下形式的一些痕迹:
E_USER_NOTICE
即,此文件包含多个跟踪。每个跟踪由几个事件和这些事件发生的时间组成。每条迹线的长度可能会有所不同。因此,我无法将数据转换为矩阵。
我写了一个Point类来将每个跟踪保存为一个对象。我还写了一个自定义函数来计算每对跟踪之间的距离。当我尝试使用我的指标构建BallTree时,它会给出:
traceId1: event1 time1 event2 time2 ... eventN timeN
traceId2: event1 time1 event2 time2 ... eventM-1 timeM-1 eventM timeM
.
.
.
基于此post,似乎BallTree只接受可以转换为float的数据类型。由于这是在2013年发布的,现在有没有解决方法?例如,在类定义中编写 float 方法?
PS:我自己可以用Python编写一个BallTree,但它没有经过优化,因此工作缓慢。并且系统限制了递归的最大深度,因此它无法在我的完整数据集上运行。我也用C ++实现了BallTree,用Python调用那个函数是个好主意吗?
答案 0 :(得分:1)
Ball Tree仅适用于可以形成2D浮点阵列的数据。您可以在对象in the source code的初始化中看到这一点。我预计代码库不会被更改为支持自定义对象数组。
在任何情况下,由于使用的Python回调的限制,自定义距离度量标准将不会非常高效。如果你有其他C ++代码可以解决你的问题,那么将它包装起来用于Python,例如使用它是相对简单的。 cython