1#ifndef SQUARED_EUCLIDIAN_DISTANCE_UTILS_H
2#define SQUARED_EUCLIDIAN_DISTANCE_UTILS_H
4#include <gsl/gsl_blas.h>
5#include <gsl/gsl_matrix.h>
6#include <gsl/gsl_vector.h>
26 virtual double getDistance(
size_t xi,
size_t yi)
const = 0;
28 size_t getL()
const {
return L; }
29 size_t getM()
const {
return M; }
30 size_t getN()
const {
return N; }
55 size_t rows =
v->size / N;
102 inline double getDistance(
size_t xi,
size_t xj)
const override {
110#pragma omp parallel for collapse(2)
112 for (
size_t i = 0;
i < L; ++
i) {
113 for (
size_t j = 0;
j < L; ++
j) {
119 for (
size_t k = 0;
k < N; ++
k) {
156 inline double getDistance(
size_t xi,
size_t xj)
const override {
163#pragma omp parallel for
165 for (
size_t i = 0;
i < L;
i++) {
175#pragma omp parallel for collapse(2)
177 for (
size_t i = 0;
i < L; ++
i) {
178 for (
size_t j = 0;
j < L; ++
j) {
213 inline double getDistance(
size_t xi,
size_t xj)
const override {
215 if (xi ==
xj)
return 0.00;
216 if (xi <
xj) std::swap(xi,
xj);
223#pragma omp parallel for
225 for (
size_t i = 1;
i < L;
i++) {
226 for (
size_t j = 0;
j <
i;
j++) {
229 for (
size_t k = 0;
k < N;
k++) {
239 inline size_t distIndex(
size_t i,
size_t j)
const {
240 return ((
i - 1) *
i) / 2 +
j;
242 inline size_t diffIndex(
size_t i,
size_t j,
size_t k)
const {
243 return distIndex(
i,
j) * N +
k;
245 inline size_t diffIndex(
size_t distIndex,
size_t k)
const {
246 return distIndex * N +
k;
276 double getDistance(
size_t xi,
size_t xj)
const override {
278 if (xi ==
xj)
return 0.00;
279 if (xi <
xj) std::swap(xi,
xj);
286#pragma omp parallel for
288 for (
size_t i = 0;
i < L;
i++) {
296#pragma omp parallel for collapse(2)
298 for (
size_t i = 1;
i < L;
i++) {
299 for (
size_t j = 0;
j <
i;
j++) {
338 double getDistance(
size_t xi,
size_t yi)
const override {
345#pragma omp parallel for collapse(2)
347 for (
size_t i = 0;
i < L;
i++) {
348 for (
size_t j = 0;
j < M;
j++) {
350 for (
size_t k = 0;
k < N;
k++) {
389 double getDistance(
size_t xi,
size_t yi)
const override {
396#pragma omp parallel for
398 for (
size_t i = 0;
i < L;
i++) {
406#pragma omp parallel for
408 for (
size_t j = 0;
j < M;
j++) {
418#pragma omp parallel for collapse(2)
420 for (
size_t i = 0;
i < L; ++
i) {
421 for (
size_t j = 0;
j < M; ++
j) {
base class for implementations calculating squared euclidean distances with just one set of vectors
Definition squared_euclidean_distance_utils.h:64
base class for implementations calculating squared euclidean distances with two set of vectors
Definition squared_euclidean_distance_utils.h:76
helper class to calculate squared euclidean distance between all linear combinations of two vector se...
Definition squared_euclidean_distance_utils.h:19
static gsl_matrix convToMatrix(const gsl_vector *v, size_t N) noexcept
convert an gsl_vector to a N column gsl_matrix
Definition squared_euclidean_distance_utils.h:53
virtual void calculateDistance(const gsl_matrix *x, const gsl_matrix *y)=0
calculate all squared euclidean distance between vectors contained as columns in x and y
implements a optimized version for calculating squared euclidean distances store in a LxL matrix
Definition squared_euclidean_distance_utils.h:141
void calculateDistance(const gsl_matrix *x, const gsl_matrix *) override
calculate all squared euclidean distance between vectors contained as columns in x and y
Definition squared_euclidean_distance_utils.h:161
implements the naive calculation of all squared euclidean distances store in a LxL matrix
Definition squared_euclidean_distance_utils.h:89
void calculateDistance(const gsl_matrix *x, const gsl_matrix *y) override
calculate all squared euclidean distance between vectors contained as columns in x and y
Definition squared_euclidean_distance_utils.h:107
implements a vectorized version of calculating squared euclidean distances store in a vector
Definition squared_euclidean_distance_utils.h:264
void calculateDistance(const gsl_matrix *x, const gsl_matrix *y) override
calculate all squared euclidean distance between vectors contained as columns in x and y
Definition squared_euclidean_distance_utils.h:283
implements a vectorized version of calculating squared euclidean distances store in a vector
Definition squared_euclidean_distance_utils.h:202
void calculateDistance(const gsl_matrix *x, const gsl_matrix *y) override
calculate all squared euclidean distance between vectors contained as columns in x and y
Definition squared_euclidean_distance_utils.h:220
implements a optimized version for calculating squared euclidean distances store in a LxM matrix
Definition squared_euclidean_distance_utils.h:372
void calculateDistance(const gsl_matrix *x, const gsl_matrix *y) override
calculate all squared euclidean distance between vectors contained as columns in x and y
Definition squared_euclidean_distance_utils.h:394
implements the naive calculation of all squared euclidean distances store in a LxM matrix
Definition squared_euclidean_distance_utils.h:326
void calculateDistance(const gsl_matrix *x, const gsl_matrix *y) override
calculate all squared euclidean distance between vectors contained as columns in x and y
Definition squared_euclidean_distance_utils.h:343
Definition dirac_to_dirac_approx_short.h:9