//第一部分,TWDTW模块
exports.DTWDist = function(patterns_arr, timeseries_col, options){
// Sort Images in ascending order based on the 'system:time_start' metadata property
timeseries_col = ee.ImageCollection(timeseries_col);
patterns_arr = ee.Array(patterns_arr);
var patterns_no = options.patterns_no || patterns_arr.length().get([0]); //示范向量从大到小的第一维长度,要分多少种
var band_no = options.band_no || patterns_arr.length().get([1]).subtract(1);//示范向量从大到小的第二维长度减一,波段数量减一
var timeseries_len = options.timeseries_len || timeseries_col.size();//时间序列的元素数量
var patterns_len = options.patterns_len || patterns_arr.length().get([2]);//示范向量从大到小的第三维长度,时间戳数量,一共有四个维度,最低维度为单个时间戳对应的数值大小
var constraint_type = options.constraint_type || 'time-weighted';//约束方式
var weight_type = options.weight_type || 'logistic';//加权种类(逻辑的/逻辑斯蒂的)
var distance_type = options.distance_type || 'euclidean';//距离种类,欧氏距离
var beta = options.beta || 50;
var alpha = options.alpha || 0.1;
var cost_weight;
var dis_arr;
var dis_mat;
// 为距离矩阵提供距离计算的迭代函数
// 目前只支持欧几里德距离和角度距离。
var _distCalc = function(img, j, k){
var wrap = function(n, previous2){
n = ee.Number(n);
previous2 = ee.List(previous2);
var x1 = img.select(n.subtract(1)).toArray().toInt16();//将第n个波段的变化连接成单个像素数组
var y1 = patterns_arr.get(ee.List([ee.Number(k).subtract(1), n.subtract(1), j.subtract(1)]));//得到该位置的向量
if (distance_type === 'euclidean') {
dis_arr = x1.subtract(y1).pow(2);//相减然后平方
}
return dis_arr.add(previous2)
}
return wrap
}
var matrix = ee.List.sequence(1, ee.Number(timeseries_len).subtract(1)).map(function(i){
var matrix_tmp = ee.List.sequence(1, ee.Number(patterns_len).subtract(1)).map(function(j){
return ee.List([i, j]);
});
return matrix_tmp;
});//获得图像与示例位数的对应图
matrix = ee.List(matrix.iterate(function(x, previous){
return ee.List(previous).cat(ee.List(x));
}, ee.List([])));//在列表上重复算法,矩阵被变化为横向数组
var dtw_image_list = ee.List.sequence(1, patterns_no).map(function(k){
if (constraint_type === 'time-weighted') {
dis_mat = timeseries_col.toList(timeseries_col.size()).map(function(img){
img = ee.Image(img);
var dis_list = ee.List.sequence(1, patterns_len).m
TWDTW初版
于 2023-04-03 11:09:17 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)