【发布时间】:2016-11-16 13:30:34
【问题描述】:
我有一个这样的项目列表:T=[T_0, T_1, ..., T_N] 其中每个 T_i 本身就是一个时间序列。我想找到所有潜在对的成对距离(通过 DTW)。
例如如果T=[T_0, T_1, T_2] 和我有一个DTW 函数f,我想找到f(T_0, T_1), f(T_0, T_2), f(T_1, T_2)。
注意T_i 实际上看起来像( id of i, [ time series values ] )。
我的代码 sn-p 如下所示:
cluster = defaultdict( list )
donotcluster = defaultdict( list )
for i, lst1 in tqdm(enumerate(T)):
for lst2 in tqdm(T):
if lst2 in cluster[lst1[0]] or lst2 in donotcluster[lst1[0]]:
pass
else:
distance, path = fastdtw(lst1[1], lst2[1], dist=euclidean)
if distance <= distance_threshold:
cluster[lst1[0]] += [ lst2 ]
cluster[lst2[0]] += [ lst1 ]
else:
donotcluster[lst1[0]] += [ lst2 ]
donotcluster[lst2[0]] += [ lst1 ]
现在我有大约 20,000 个时间序列,这需要的时间太长(大约需要 5 天)。我正在使用 python 库fastdtw。有没有更优化的库?或者只是计算所有可能距离的更好/更快的方法?由于距离是对称的,如果我已经计算了f(T_33, T_41),我就不必计算例如f(T_41,T_33)
【问题讨论】: