如何结合Matlab的内置函数dtw和pdist吗?

14日视图(30天)
DS
DS 2017年11月16日
评论道: 格雷格·迪翁 2023年3月20日
你好,我想对我的数据执行层次聚类。我试过几个距离度量,但是现在我想使用动态时间扭曲的内置函数(信号处理工具箱),通过传递函数处理 @dtw 的函数 pdist 。occuried以下问题:
错误使用pdist(第391行)
错误评估的dtw距离函数。
引起的由:
错误使用dtw(第87行)
X和Y之间的行数必须相等时,X和Y是矩阵
这是我使用的代码:
D = pdist(数据、@dtw);% 1184 x38双矩阵数据,1184年是时间序列的数量
Z =连杆(D,“病房”);
res =集群(Z,“maxclust”,numClusters);%。numClusters = 5
提前感谢!
1评论
Dankur Mcgoo
Dankur Mcgoo 2018年7月5日
你最终会解决你的问题了吗?我面临着同样的问题。

登录置评。

答案(1)

格雷格·迪翁
格雷格·迪翁 2018年8月9日
你想要的输出DTW和把它放到PDIST可以识别的形式。
这应该让你开始:
函数d = dtwdist (Xi, Xj,变长度输入宗量)
[m, n] =大小(Xj);
% preallocate
d = 0 (m, 1);
j = 1: m
d (j) = dtw (Xi, Xj (j:),变长度输入宗量{:});
结束
使用它:
X = randn (118、38);
maxsamp = 10;
d = pdist (X, @ (Xi, Xj) dtwdist (Xi, Xj, maxsamp“方”))
显示亮度图像(squareform (d));
colorbar;
标题(的距离矩阵)
3评论
格雷格·迪翁
格雷格·迪翁 2023年3月20日
你好阿米拉,
DTW不会工作在南的存在价值。
如果你给一个小的幕后每一列表示什么?如果你需要的是计算之间的距离度量每一列(没有南),也许你可以过滤出来之前发给DTW吗?
如果你有一个向量v,您可以删除NaN值通过:
v = v (~ isnan (v));
矩阵,它可能更容易操作之前一个列/行DTW发送。
行= M (j,:)
行=行(~ isnan(行));
所以我正确理解你的问题(假设):
函数d = dtwdist (Xi, Xj,变长度输入宗量)
[m, n] =大小(Xj);
% preallocate
d = 0 (m, 1);
j = 1: m
x = Xi (~ isnan (Xi));
:y = Xj (j);
y = y (~ isnan (y));
d (j) = dtw (x, y,变长度输入宗量{:});
结束
希望有帮助。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!