WarpingCorrespondence[s1,s2]
给出序列 s1 与 s2 间的时间翘曲(DTW)相似路径.
WarpingCorrespondence[s1,s2,win]
使用由 win 为局部搜索指定的窗口.
WarpingCorrespondence
WarpingCorrespondence[s1,s2]
给出序列 s1 与 s2 间的时间翘曲(DTW)相似路径.
WarpingCorrespondence[s1,s2,win]
使用由 win 为局部搜索指定的窗口.
更多信息和选项
- WarpingCorrespondence 也被称之为动态时间翘曲.
- WarpingCorrespondence 返回未减少位置的 {{n1,…,nk},{m1,…,mk}},例如 s1〚ni〛 对应于 s2〚mi〛.
- 返回的位置尝试在所有可能的位置上最小化
,在这种约束下, s1 和 s2 的所有元素被分别表示为某种 s1〚ni〛 和 s2〚mj〛. - 使用 WarpingDistance 计算有效的距离.
- 序列 si 可以是数值或布尔标量或向量的列表.
- 搜索窗 win 的可能设置为:
-

Automatic 完整搜索 
r 半径为
的倾斜带窗
{"SlantedBand",r} 半径为
的倾斜带窗
{"Band",r} 半径为
(Sakoe-Chiba) 的倾斜带窗
{"Parallelogram",a} 放在原点的平行四边形窗,斜率为
和
(Itakura) - 一般
较小,会更快给出结果,但不是最优结果. 如果
,那么
没有任何影响. - 支持以下选项:
-
DistanceFunction Automatic 使用的距离函数 Method Automatic 使用 DTW 的变种 - WarpingCorrespondence 接受具有以下设置的 DistanceFunctiond 选项:
-
Automatic 自动确定距离函数 EuclideanDistance 欧几里得距离 ManhattanDistance 曼哈顿或“城区”距离 BinaryDistance 如果元素相等则为 0;否则为 1 ChessboardDistance 切比雪夫或超 (sup) 标准距离 SquaredEuclideanDistance 平方欧几里得距离 NormalizedSquaredEuclideanDistance 正则平方欧几里得距离 CosineDistance 角余弦距离 CorrelationDistance 相关系数距离 BrayCurtisDistance Total[Abs[u-v]]/Total[Abs[u+v]] CanberraDistance Total[Abs[u-v]/(Abs[u]+Abs[v])] MatchingDissimilarity 匹配布尔向量间的相异 - 默认情况下使用以下距离函数:
-
EuclideanDistance 数值数据 MatchingDissimilarity 布尔数据 - 使用 Method->Automatic, s2 的所有元素被 s1 的所有元素匹配.
- 使用 Method->{"MatchingInterval"match},s2 可以用 s1 的子序列匹配. match 的可能设置包括:
-
Automatic 完全匹配 "Flexible" 两端均有弹性 "FlexibleEnd" 只在间隔的一端有弹性
范例
打开所有单元 关闭所有单元基本范例 (1)
s1 = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6};
s2 = {1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7};{n, m} = WarpingCorrespondence[s1, s2]ListLinePlot[{n, m}]ListLinePlot[{s1[[n]], s2[[m]]}]范围 (9)
数据 (6)
WarpingCorrespondence[{Pi, E, E + Pi, -Pi / E}, {Pi ^ E, E - Pi, -E * Pi, E ^ Pi}]//TextGrids1 = {{11, 12}, {13, 14}, {15, 16}};
s2 = {{12, 13}, {14, 15}};WarpingCorrespondence[s1, s2]//TextGrids1 = PrimeQ /@ Range[1, 20]s2 = CoprimeQ[#, 6]& /@ Range[1, 20]WarpingCorrespondence[s1, s2]//ListLinePlots1 = {{True, True, True}, {False, True, True}, {False, False, True}, {True, True, False}, {False, True, True}};
s2 = {{True, True, True}, {True, False, True}, {False, True, True}, {False, True, True}};WarpingCorrespondence[s1, s2]//TextGrids1 = QuantityArray[{1, 2.5, 4}, "Decimeters"];
s2 = {Quantity[0.1, "Kilometers"], Quantity[200, "Inches"]};WarpingCorrespondence[s1, s2]//TextGrids1 = QuantityArray[{{1, 2.5}, {4, 5}, {5, 4}}, {"Seconds", "Minutes"}]s2 = Table[Quantity[(i + j) / 60, "Hours"], {i, 5}, {j, 2}]WarpingCorrespondence[s1, s2]//TextGrid搜索窗 (3)
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
s2 = {1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 5, 5, 6, 7};WarpingCorrespondence[s1, s2]//TextGridWarpingCorrespondence[s1, s2] == WarpingCorrespondence[s1, s2, Automatic]WarpingCorrespondence[s1, s2, 1]//TextGridWarpingCorrespondence[s1, s2, 2]//TextGrids1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
s2 = {1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};WarpingCorrespondence[s1, s2, {"Band", 1}]//TextGridWarpingCorrespondence[s1, s2, {"Parallelogram", 3}]//TextGrid对于等长的信号,"Band" 窗等同于 "SlantedBand" 窗:
s1 = RealDigits[Pi, 10, 25]//First;
s2 = RealDigits[E, 10, 25]//First;WarpingCorrespondence[s1, s2, {"Band", 3}] == WarpingCorrespondence[s1, s2, {"SlantedBand", 3}]选项 (4)
DistanceFunction (3)
对于布尔序列,WarpingCorrespondence 使用 MatchingDissimilarity:
s1 = {{True, False, False}, {True, True, False}, {True, False, False}, {True, False, False}, {False, False, False}};
s2 = {{False, False, False}, {True, True, False}, {False, True, False}, {False, True, False}, {True, False, True}, {False, False, False}, {True, False, False}};WarpingCorrespondence[s1, s2]WarpingCorrespondence[s1, s2, DistanceFunction -> MatchingDissimilarity] == %v1 = {50, 60, 70, 71, 71, 73, 75, 80, 80, 80, 78, 76, 75, 73, 71, 71, 71, 73, 75, 76, 76, 68, 76, 76, 75, 73};
v2 = {61, 62, 62, 64, 69, 69, 73, 75, 79, 80, 79, 78, 76, 73, 72, 71, 70, 70, 69, 69, 69, 71, 73, 75, 76};
distances = {EuclideanDistance, BinaryDistance, CorrelationDistance};ListLinePlot[Transpose[WarpingCorrespondence[v1, v2, DistanceFunction -> #]]& /@ distances, PlotLegends -> distances]s1 = Range[10];
s2 = Range[15];WarpingCorrespondence[s1, s2, DistanceFunction -> EuclideanDistance] == WarpingCorrespondence[s1, s2, DistanceFunction -> ManhattanDistance] == WarpingCorrespondence[s1, s2, DistanceFunction -> ChessboardDistance]WarpingCorrespondence[s1, s2, DistanceFunction -> NormalizedSquaredEuclideanDistance] == WarpingCorrespondence[s1, s2, DistanceFunction -> CorrelationDistance]s1 = {True, False, True};
s2 = {False, False, True};WarpingCorrespondence[s1, s2, DistanceFunction -> MatchingDissimilarity] == WarpingCorrespondence[s1, s2, DistanceFunction -> BinaryDistance]Method (1)
query = Table[{Cos[a], Sin[a]}, {a, Range[10] * Pi / 5.}];
ref = PadLeft[PadRight[query, {15, 2}], {20, 2}];(openEnd = WarpingCorrespondence[ref, query, Method -> {"MatchingInterval" -> "FlexibleEnd"}])//TextGrid(full = WarpingCorrespondence[ref, query])//TextGridListLinePlot[{openEnd, full}, PlotLegends -> {"Relaxed DTW", "Strict DTW"},
GridLines -> {Range[20], Range[10]}, PlotStyle -> {Thickness[.03], Automatic}, PlotRange -> {{0, 21}, {0, 11}}]应用 (2)
timeWarpingPlot[s1_, s2_] :=
Module[{n, m},
{n, m} = WarpingCorrespondence[s1, s2];
ListLinePlot[{s1, s2}, PlotMarkers -> Automatic, Epilog -> {RGBColor[0.560181, 0.691569, 0.194885], Line@Transpose[{{n, s1[[n]]},
{m, s2[[m]]}}]}]
];{s1, s2} = {{1, 2, 3, 4, 5, 9}, {11, 9, 8, 9, 12, 14}};WarpingCorrespondence[s1, s2]timeWarpingPlot[s1, s2]比较 2017 年第一季度的 HPQ 股票价格与 2010 年至 2016 年的历史数据:
recent = QuantityMagnitude[FinancialData["HPQ", {{2017, 1, 1}, {2017, 3, 31}}]["Values"]];history = FinancialData["HPQ", {{2010, 1, 1}, {2016, 12, 31}}, "DateValue"];
{histDates, hist} = {history["Dates"], QuantityMagnitude[history["Values"]]};{corrHist, corrRecent} = WarpingCorrespondence[hist, recent, Method -> {"MatchingInterval" -> "Flexible"}];{m, n} = corrHist[[{1, -1}]];
histDates[[{m, n}]]DateListPlot[{AssociationThread[Take[histDates[[m ;; n]], UpTo@Length[recent]], Take[recent, UpTo[n - m + 1]]], AssociationThread[histDates[[m ;; n]], hist[[m ;; n]]]}, ...]l = Length[recent];
colDat = ColorData[97];
offset = Last[recent] - hist[[n]];
hist30d = hist[[n ;; n + 30]];
ListLinePlot[{recent, {l + Range[31], hist30d + offset}, hist[[m ;; n]], {n - m + Range[31], hist30d}}, ...]属性和关系 (7)
WarpingCorrespondence[{1, 2, 3, 4, 5}, {1, 2, 3}]c = WarpingCorrespondence[Range[10], Range[10]];
ListPlot[c]s1 = Sin[Range[1000] / 50 * 2 * Pi];
s2 = Sin[Range[5, 1004] / 100 * 2 * Pi] + RandomReal[{-.1, .1}, 1000];w1 = WarpingCorrespondence[s1, s2, 10];//AbsoluteTiming//Firstw2 = WarpingCorrespondence[s1, s2];//AbsoluteTiming//FirstListLinePlot[{Legended[Transpose[w1], "r = 10"], Legended[Transpose[w2], "optimal warping"]}]当计算完整响应,WarpingCorrespondence 是对称的:
s1 = {1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7};
s2 = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6};
WarpingCorrespondence[s1, s2] == Reverse@WarpingCorrespondence[s2, s1]WarpingCorrespondence[s1, s2, Method -> {"MatchingInterval" -> "Flexible"}] == Reverse@WarpingCorrespondence[s2, s1, Method -> {"MatchingInterval" -> "Flexible"}]s1 = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6};
s2 = {1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7};
res1 = WarpingCorrespondence[s1, s2];res2 = WarpingCorrespondence[s1, s2 - 2];
ListLinePlot[{res1, res2}, PlotLegends -> {"original signal", "translated signal"}]同时从两个序列增加或减去不会影响结果,当距离函数是由范数(平移不变)产生:
s1 = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6};
s2 = {1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7};WarpingCorrespondence[s1, s2] == WarpingCorrespondence[s1 - 3, s2 - 3]res1 = WarpingCorrespondence[s1, s2, DistanceFunction -> BrayCurtisDistance];res2 = WarpingCorrespondence[s1 - 3, s2 - 3, DistanceFunction -> BrayCurtisDistance];
ListLinePlot[{res1, res2}, PlotLegends -> {"original signals", "translated signals"}]与 WarpingDistance 的关系:
s1 = Sin[Range[100] / 50 * 2 * Pi];
s2 = Sin[Range[5, 104] / 100 * 2 * Pi] + RandomReal[{-.1, .1}, 100];
distance = EuclideanDistance;{n, m} = WarpingCorrespondence[s1, s2, DistanceFunction -> distance];l1 = s1[[n]];
l2 = s2[[m]];WarpingDistance 给出响应元素间所有距离的总和:
Total[MapThread[distance, {l1, l2}]] == WarpingDistance[s1, s2, DistanceFunction -> distance]可能存在的问题 (3)
WarpingCorrespondence[{1, 2, 3}, {{1, 2}, {3, 4}, {5, 6}}]WarpingCorrespondence[{1, 2, 3}, {True, False, True}]s1 = {0, 0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6};
s2 = {1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7};
WarpingCorrespondence[s1, s2, {"Band", 1}]相关指南
-
▪
- 序列调整和比较
文本
Wolfram Research (2016),WarpingCorrespondence,Wolfram 语言函数,https://reference.wolfram.com/language/ref/WarpingCorrespondence.html.
CMS
Wolfram 语言. 2016. "WarpingCorrespondence." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/WarpingCorrespondence.html.
APA
Wolfram 语言. (2016). WarpingCorrespondence. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/WarpingCorrespondence.html 年
BibTeX
@misc{reference.wolfram_2026_warpingcorrespondence, author="Wolfram Research", title="{WarpingCorrespondence}", year="2016", howpublished="\url{https://reference.wolfram.com/language/ref/WarpingCorrespondence.html}", note=[Accessed: 01-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_warpingcorrespondence, organization={Wolfram Research}, title={WarpingCorrespondence}, year={2016}, url={https://reference.wolfram.com/language/ref/WarpingCorrespondence.html}, note=[Accessed: 01-November-2026]}