Example #1
0
void euclid(Real *v,char *out)
{
  int i,j;
  int nearest_item;
  float error=0;
  float nearest_distance=1000000000.0,d;

  for(i=0;i<PHO_SLOTS;i++)
    {
      nearest_item=-1;
      for(j=0;j<phocount;j++)
	{
	  d=euclid_distance(&v[i*PHO_FEATURES],phonemes[j].vector);
	  if ((nearest_item == -1) ||
	      (d < nearest_distance))
	    {
	      nearest_item=j;
	      nearest_distance=d;
	    }
	}
      error += d;
      out[i]=phonemes[nearest_item].ch;
    }
  out[PHO_SLOTS]=0;
}
Example #2
0
void Kmeans::m_step(const MatrixXdRowMajor& data_points)
{
    validate_centroids(data_points);
    MatrixXdRowMajor tmp = MatrixXdRowMajor::Zero(centroids.rows(), centroids.cols());
    for (int i=0; i<data_points.rows(); i++)
        tmp.row(membership(i)) += data_points.row(i);
    for (int i=0; i<centroids.rows(); i++)
    {
        tmp.row(i) /= points_per_centroid(i);
        double tmp_error = euclid_distance(centroids.row(i), tmp.row(i));
        if (tmp_error != 0.0)
            changed_centroids++;
        if (tmp_error > error)
            error = tmp_error;
        centroids.row(i) = tmp.row(i);
    }
}