Hi everyone. I have ~161 time series of heart rates taken during a vocalization. I would like to sort these using the DTW algorithm. I have tried using the following to do this: [idx,c,sumd,d] = kmedoids(dat,nclust,'Distance',@dtw); But I end up with the following errors. I have done this before... with the exact same code. Does anyone know what I could be doing wrong? Error using pdist (line 371) Error evaluating distance function 'dtw'. Error in internal.stats.kmedoidsDistObj/pdist (line 65) out = pdist(X,distObj.distance); Error in kmedoids>precalcDistance (line 575) distVec = distObj.pdist(X); Error in kmedoids>loopBody (line 546) xDist = precalcDistance(X,distObj); Error in kmedoids (line 362) oneRun = loopBody(algorithm,initialize,X,k,distObj,pneighbors,numsamples,options,display,usePool,onlinePhase); Error in dtwclassifier (line 9) [idx,c,sumd,d] = kmedoids(dat,nclust,'Distance',@dtw); Caused by: Error using dtw (line 115) The number of rows between X and Y must be equal when X and Y are matrices Would it be correct to compute my own distance matrix using DTW, and perform K-Means clustering on that?
Prashant Kumar answered .
2025-11-20
function D2 = distfun(ZI,ZJ) % calculation of distance ...
data = rand(161,20);
[idx,c,sumd,d] = kmedoids(data,10,'Distance',@dtwf);
function dist = dtwf(x,y)
% n = numel(x);
m2 = size(y,1);
dist = zeros(m2,1);
for i=1:m2
dist(i) = dtw(x,y(i,:));
end
end