CanonicalWarpingDistance[s1,s2]
给出序列 s1 和 s2 之间的典型时间规整 (CTW) 距离.
CanonicalWarpingDistance[s1,s2,init]
用 init 作为两个序列间的初始对应.
CanonicalWarpingDistance[s1,s2,init,win]
在局部搜索中使用窗口 win.
CanonicalWarpingDistance
CanonicalWarpingDistance[s1,s2]
给出序列 s1 和 s2 之间的典型时间规整 (CTW) 距离.
CanonicalWarpingDistance[s1,s2,init]
用 init 作为两个序列间的初始对应.
CanonicalWarpingDistance[s1,s2,init,win]
在局部搜索中使用窗口 win.
更多信息和选项
- 典型时间规整 (CTW) 迭代式地对参考序列 s1 和查询序列 s2 进行空间转换和动态时间规整来找出两个序列间距离最小的匹配.
- 序列 si 可以是数字标量或矢量的列表. 与动态时间规整不同, s1 和 s2 的元素的维度可以不同.
- 距离由
给出,其中 s1〚ni〛 和 s2〚mi〛 为对应元素,α 和 β 是用典型相关分析计算所得的空间变换矩阵. - 可用 CanonicalWarpingCorrespondence 来获得可算出距离的对应.
- 应以形式 {{n1,…,nk},{m1,…,mk}} 给出初始对应 init,它给出了 s1 和 s2 的元素间初始的一一对应.
- 搜索窗口 win 的可能设置为:
-

Automatic 全面搜索 
r 半径为
的倾斜的带状窗口
{"SlantedBand",r} 半径为
的倾斜的带状窗口
{"Band",r} 半径为
的带状窗口 (Sakoe–Chiba)
{"Parallelogram",a} 置于原点的平行四边形窗口,斜度为
和
(Itakura) - 支持下列选项:
-
DistanceFunction Automatic 在动态时间规整中使用的距离函数 MaxIterations Automatic 最大迭代次数 Method Automatic 使用的 CTW 的变体 - 想要了解 DistanceFunction 的可能设置,请查阅 WarpingDistance 的参考页面.
- 通过设置 Method->opts 可以使用下列选项:
-
"DimensionsToKeep" Automatic 映射后的维度 "EnergyThreshold" Automatic 要保留多少“能量” "Lambdas" Automatic 规则化值 "MatchingIntervals" Automatic 将查询序列和整个参考序列匹配还是和部分参考序列匹配 - "MatchingIntervals" 选项的可能设置包括:
-
Automatic 全部匹配 "Flexible" 区间两端都可变 "FlexibleEnd" 只有区间末端可变
范例
打开所有单元 关闭所有单元基本范例 (2)
范围 (9)
数据 (6)
CanonicalWarpingDistance[{1, 1, 1, 2, 2, 3, 4}, {11, 13, 17, 19}]CanonicalWarpingDistance[{{0, 0}, {1, 0}, {1, 1}}, {{-1, -2}, {1, 2}, {0, 0}}]CanonicalWarpingDistance[{1, 1, 1, 2, 2, 3, 4}, {{-1, -2, -3}, {1, 2, 3}, {0, 0, 0}}]s1 = QuantityArray[{1, 2.5, 4}, "Decimeters"];
s2 = {Quantity[0.1, "Kilometers"], Quantity[200, "Inches"]};CanonicalWarpingDistance[s1, s2]CanonicalWarpingDistance[s1, s2] == CanonicalWarpingDistance[UnitConvert[s1], UnitConvert[s2]]s1 = QuantityArray[{{1, 2.5}, {4, 5}, {5, 4}}, {"Seconds", "Minutes"}]s2 = Table[Quantity[(i + j) / 60, "Hours"], {i, 5}, {j, 2}]CanonicalWarpingDistance[s1, s2]squant = QuantityArray[{1, 2.5, 4, 5}, "Kilometers"];
sscal = {500, 400, 300};CanonicalWarpingDistance[squant, sscal]CanonicalWarpingDistance[squant, QuantityArray[sscal, "meters"]]% == %%初始规整 (1)
s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
s2 = {1, 1, 1, 1, 1, 2, 3, 7, 8, 9, 10};CanonicalWarpingDistance[s1, s2]CanonicalWarpingDistance[s1, s2, {Range[Length[s1]], ArrayResample[Range[Length[s2]], Length[s1], Resampling -> "NearestLeft"]}]搜索窗口 (2)
s1 = {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};CanonicalWarpingDistance[s1, s2]s1 = {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};CanonicalWarpingDistance[s1, s2, Automatic, {"SlantedBand", 1}]选项 (2)
MaxIterations (2)
s1 = Table[{7t * Cos[1.8t], 3t * Sin[1.8t]}, {t, Range[0, 4Pi, 4Pi / 650]}];
s2 = Table[{5t * Cos[t], -3t * Sin[t]}, {t, Range[0, 6Pi, 6Pi / 500]}];
Graphics[{{Red, Point[s1]}, {Blue, Point[s2]}}]AbsoluteTiming[CanonicalWarpingDistance[s1, s2]]AbsoluteTiming[CanonicalWarpingDistance[s1, s2, MaxIterations -> 20]]在 CTW 收敛的情况下,增大最大迭代次数可能产生较小的距离:
AbsoluteTiming[CanonicalWarpingDistance[s1, s2, MaxIterations -> 100]]设置 MaxIterations∞ 来计算收敛后的距离. CTW 不收敛:
s1 = Table[{7t * Cos[1.8t], 3t * Sin[1.8t]}, {t, Range[0, 4Pi, 4Pi / 650]}];
s2 = Table[{5t * Cos[t], -3t * Sin[t]}, {t, Range[0, 6Pi, 6Pi / 500]}];CanonicalWarpingDistance[Take[s1, 450], s2, MaxIterations -> Infinity]应用 (1)
borders = <|# -> ArrayResample[CountryData[#, "Polygon"][[1, 1, 1]], 200]& /@ {"USA", "Poland", "Portugal", "Vietnam", "Brazil", "Finland"}|>;dm = DistanceMatrix[Values[borders], DistanceFunction -> (Chop[CanonicalWarpingDistance[##, MaxIterations -> 6]]&)];nameTicks = {Range[6], Rotate[#, π / 4]& /@ Keys[borders]};
shapeTicks = {Range[6], Graphics[CountryData[#, "Shape"][[1]], ImageSize -> {50, 50}]& /@ Keys[borders]};MatrixPlot[dm, FrameTicks -> {{shapeTicks, None}, {nameTicks, None}}, Mesh -> True, PlotLegends -> Automatic, PlotLabel -> "Distance based on country shape", ImageSize -> Medium]属性和关系 (1)
s1 = Table[{Cos[0.6t] * Cos[t], Cos[0.6t] * Sin[t]}, {t, 0, 6Pi, 2Pi / 100}];
s2 = TranslationTransform[{2, 2}] /@ s1;ListLinePlot[{s1, s2}]CanonicalWarpingDistance[s1, s2]s1 = Table[{2Cos[t], Sin[t]}, {t, 0, 2Pi, 2Pi / 20}];
s2 = 3s1;
ListLinePlot[{s1, s2}]CanonicalWarpingDistance[s1, s2]s1 = Table[{Cos[3t] * Cos[t], Cos[3t] * Sin[t]}, {t, 0, 2Pi, 2Pi / 100}];
s2 = RotationTransform[Pi] /@ s1;ListLinePlot[{s1, s2}]CanonicalWarpingDistance[s1, s2]相关指南
-
▪
- 距离和相似度测量
文本
Wolfram Research (2016),CanonicalWarpingDistance,Wolfram 语言函数,https://reference.wolfram.com/language/ref/CanonicalWarpingDistance.html.
CMS
Wolfram 语言. 2016. "CanonicalWarpingDistance." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/CanonicalWarpingDistance.html.
APA
Wolfram 语言. (2016). CanonicalWarpingDistance. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/CanonicalWarpingDistance.html 年
BibTeX
@misc{reference.wolfram_2026_canonicalwarpingdistance, author="Wolfram Research", title="{CanonicalWarpingDistance}", year="2016", howpublished="\url{https://reference.wolfram.com/language/ref/CanonicalWarpingDistance.html}", note=[Accessed: 06-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_canonicalwarpingdistance, organization={Wolfram Research}, title={CanonicalWarpingDistance}, year={2016}, url={https://reference.wolfram.com/language/ref/CanonicalWarpingDistance.html}, note=[Accessed: 06-September-2026]}