clann_void_type rbf_compute_center_widths(struct rbf *ann) { clann_size_type i, j, s; clann_real_type v, d, maximum = 0; for (i = 0; i < ann->centers.rows; i++) { for (j = 0; j < ann->centers.rows; j++) { v = 0; for (s = 0; s < ann->centers.cols; s++) { d = *clann_matrix_value(&ann->centers, i, s); d = d - *clann_matrix_value(&ann->centers, j, s); v += d * d; } v = CLANN_SQRT(v); if (v > maximum) maximum = v; } } v = maximum / CLANN_SQRT(2 * ann->n_centers); for (i = 0; i < ann->n_centers; i++) ann->centers_width[i] = v; }
clann_real_type metric_norm(const clann_real_type *a, const unsigned int length) { clann_real_type sum = 0; unsigned int i; for (i = 0; i < length; i++) sum += CLANN_POW(a[i], 2); return CLANN_SQRT(sum); }
clann_real_type metric_euclidean(const clann_real_type *a, const clann_real_type *b, const unsigned int length) { clann_real_type e, sum = 0; unsigned int i; for (i = 0; i < length; i++) { e = a[i] - b[i]; sum += e * e; } return CLANN_SQRT(sum); }