title: How can I perform K-means clustering on time series data?
body: <p>How can I do K-means clustering of time series data?
  I understand how this works when the input data is a set of points, but I don't know how to cluster a time series with 1XM, where M is the data length. In particular, I'm not sure how to update the mean of the cluster for time series data.</p>
  
  <p>I have a set of labelled time series, and I want to use the K-means algorithm to check whether I will get back a similar label or not. My X matrix will be N X M, where N is number of time series and M is data length as mentioned above.</p>
  
  <p>Does anyone know how to do this? For example, how could I modify <a href="http://www.mathworks.cn/matlabcentral/fileexchange/19344-efficient-k-means-clustering-using-jit" rel="noreferrer">this k-means MATLAB code</a> so that it would work for time series data? Also, I would like to be able to use different distance metrics besides Euclidean distance.</p>
  
  <p>To better illustrate my doubts, here is the code I modified for time series data:</p>
  
  <hr>
  
  <pre class="lang-none prettyprint-override"><code>% Check if second input is centroids
  if ~isscalar(k) 
      c=k;
      k=size(c,1);
  else
      c=X(ceil(rand(k,1)*n),:); % assign centroid randomly at start
  end
  
  % allocating variables
  g0=ones(n,1); 
  gIdx=zeros(n,1);
  D=zeros(n,k);
  
  % Main loop converge if previous partition is the same as current
  while any(g0~=gIdx)
  %     disp(sum(g0~=gIdx))
      g0=gIdx;
      % Loop for each centroid
      for t=1:k
          %  d=zeros(n,1);
          % Loop for each dimension
          for s=1:n
              D(s,t) = sqrt(sum((X(s,:)-c(t,:)).^2)); 
          end
      end
      % Partition data to closest centroids
      [z,gIdx]=min(D,[],2);
      % Update centroids using means of partitions
      for t=1:k
  
          % Is this how we calculate new mean of the time series?
          c(t,:)=mean(X(gIdx==t,:));
  
      end
  end
  </code></pre>