You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言`dtw`与Python`dtw-python`计算DTW结果不一致问题

R与Python dtw包DTW距离计算结果差异问题

我正在探索Python中计算动态时间规整(Dynamic Time Warping, DTW)距离的多种方案,受限于相关包文档不足,尝试了dtaidistance的distance_fast、distance,fastdtw的fastdtw以及dtw-python的dtw函数,发现它们的计算结果存在差异,推测和默认参数有关但找不到相关说明。

目前我重点对比R语言dtw包与Pythondtw-python包,二者官方标注为直接等价且文档相似,但设置相同参数(Sakoechiba窗口、窗口大小5)后,使用UCI合成控制时序数据集(每行代表一条时序)计算得到的结果差异显著。

R代码与结果

R代码

data=read.table('synthetic_control.data',header=FALSE)
library(dtw)
dtw(x=data[1,], y=data[2,] ,
               window.type= "sakoechiba", window.size= 5)$distance
dtw(x=data[2,], y=data[3,] ,
               window.type= "sakoechiba", window.size= 5)$distance
dtw(x=data[2,], y=data[600,],
               window.type= "sakoechiba", window.size= 5)$distance
dtw(x=data[1,], y=data[600,],
               window.type= "sakoechiba", window.size= 5)$distance
dtw(x=data[3,], y=data[600,],
               window.type= "sakoechiba", window.size= 5)$distance

R计算结果(欧氏距离)

[1] 42.181
[1] 35.09292
[1] 105.0999
[1] 110.9285
[1] 105.9934

Python代码与结果

Python代码

import pandas as pd
data =  pd.read_csv("synthetic_control.data", 
                    header=None,delimiter=r"\s+")
from dtw import *
print(dtw(x=data.loc[0], y=data.loc[1] ,
               window_args= {"window_type": "sakoechiba", "window_size": 5},
               keep_internals=True).distance)
print(dtw(data.loc[1], data.loc[2] ,
               window_args= {"window_type": "sakoechiba", "window_size": 5},
               keep_internals=True).distance)
print(dtw(data.loc[1], data.loc[599] ,
               window_args= {"window_type": "sakoechiba", "window_size": 5},
               keep_internals=True).distance)
print(dtw(data.loc[0], data.loc[599] ,
               window_args= {"window_type": "sakoechiba", "window_size": 5},
               keep_internals=True).distance)
print(dtw(data.loc[2], data.loc[599] ,
               window_args= {"window_type": "sakoechiba", "window_size": 5},
               keep_internals=True).distance)

(注:原代码中data_a应为data,已修正)

Python计算结果

166.58120000000002
165.87640000000005
647.89322
604.29862
663.3971200000001

我已确保参数设置一致且默认参数看似相同,请问问题出在哪里?


内容的提问来源于stack exchange,提问作者hamagust

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:24