-
Notifications
You must be signed in to change notification settings - Fork 15
Implemented Various Distance Metric #107
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 23 commits
4900b40
341ebc0
34f6cc2
0c12221
d6d077b
16031e4
3fb7402
019f9f2
e955eee
9718f25
c2d485e
3512f9b
5d0550e
93d1b7a
0d73928
c3fb7c9
004c5c2
8d19454
2e4d110
a55d7cb
4e01ffb
6601058
cf7e2c6
313e84e
fbbeb70
56ead03
77e2b07
deb0d05
87d1367
5c3a18e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| // #include "../src/slowmokit/methods/metrics/distance_metric/distance_metric.hpp" | ||
|
|
||
|
|
||
| // int main() | ||
| // { | ||
| // std::vector<double> dist1 = {1, 4, 4, 4}; | ||
| // std::vector<double> dist2 = {1, 2, 3, 4}; | ||
| // DistanceMetric Dist(dist1, dist2); | ||
| // std::cout << "Minkowski Distance is " << Dist.minkowski(3) << std::endl; | ||
| // std::cout << "Euclidean Distance is " << Dist.euclidean() << std::endl; | ||
| // std::cout << "Manhattan Distance is " << Dist.manhattan() << std::endl; | ||
| // std::cout << "Cosine Similarity is " << Dist.cosineSimilarity() << std::endl; | ||
| // return 0; | ||
| // } |
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,72 @@ | ||||||||||||||
| /** | ||||||||||||||
| * @file methods/metrics/distance_metric/distance_metric.hpp | ||||||||||||||
| * | ||||||||||||||
| * Easy include to calculate distance metrics | ||||||||||||||
| */ | ||||||||||||||
|
|
||||||||||||||
| #include "distance_metric.hpp" | ||||||||||||||
|
|
||||||||||||||
| template<class T> | ||||||||||||||
| DistanceMetric<T>::DistanceMetric(std::vector<T> &x, std::vector<T> &y) | ||||||||||||||
| { | ||||||||||||||
| this->x = x; | ||||||||||||||
| this->y = y; | ||||||||||||||
|
||||||||||||||
| DistanceMetric<T>::DistanceMetric(std::vector<T> &x, std::vector<T> &y) | |
| { | |
| this->x = x; | |
| this->y = y; | |
| DistanceMetric<T>::DistanceMetric(std::vector<T> &x, std::vector<T> &y) : x(x), y(y) | |
| { |
Use initialiser list, they are faster.
uttammittal02 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use std::abs(x[i] - y[i]) instead.
Otherwise there might be a problem in case of odd values of p.
uttammittal02 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,58 @@ | ||||||||
| /** | ||||||||
| * @file methods/metrics/distance_metric/distance_metric.hpp | ||||||||
| * | ||||||||
| * Easy include to calculate distances | ||||||||
| */ | ||||||||
|
|
||||||||
| #ifndef SLOWMOKIT_DISTANCE_METRIC_HPP | ||||||||
| #define SLOWMOKIT_DISTANCE_METRIC_HPP | ||||||||
| #include "../../../core.hpp" | ||||||||
|
|
||||||||
| /** | ||||||||
| * Takes predicted and actual values of classes | ||||||||
| * @param x | ||||||||
| * @param y | ||||||||
|
Comment on lines
+13
to
+14
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add short statement describing |
||||||||
| * @returns the distance metrics | ||||||||
| * @throws domain_error exception when size of the two vectors is not equal | ||||||||
| */ | ||||||||
| template<class T> class DistanceMetric | ||||||||
| { | ||||||||
| private: | ||||||||
| std::vector<T> x; | ||||||||
| std::vector<T> y; | ||||||||
|
|
||||||||
| public: | ||||||||
| DistanceMetric(std::vector<T> &x, std::vector<T> &y); | ||||||||
|
|
||||||||
| /** | ||||||||
| * @returns euclidean distance between the two vectors | ||||||||
| */ | ||||||||
| T euclidean(); | ||||||||
|
|
||||||||
|
|
||||||||
| /** | ||||||||
| * @returns manhattan distance between the two vectors | ||||||||
| */ | ||||||||
| T manhattan(); | ||||||||
|
|
||||||||
|
|
||||||||
| /** | ||||||||
| * @param power The order of the norm | ||||||||
| * @returns minkowski distance between the two vectors | ||||||||
|
||||||||
| * @returns minkowski distance between the two vectors | |
| * @returns minkowski distance between the two vectors | |
| * @throws ... |
power < 1 is not allowed..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't want user to feel insecure about their data. Use
const. (No need to update in.hppfile)const in cpp but not in hpp?
.hppfile.cppfileis valid and recommended.