Skip to content

Commit e9bd4d5

Browse files
andrewctamcclauss
authored andcommitted
Create euclidean_distance.py (TheAlgorithms#3350)
* Create distance_formula.py * Remove whitespace * Update distance_formula.py * Update distance_formula.py * Update distance_formula.py * Generalize * Grammar mistake * Rename distance_formula.py to euclidean_distance.py * Update euclidean_distance.py * v1 - > v2 * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update maths/euclidean_distance.py Co-authored-by: Christian Clauss <[email protected]> * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update euclidean_distance.py * Update maths/euclidean_distance.py Co-authored-by: Christian Clauss <[email protected]> Co-authored-by: Christian Clauss <[email protected]>
1 parent dc831f1 commit e9bd4d5

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

Diff for: maths/euclidean_distance.py

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
from typing import Iterable, Union
2+
3+
import numpy as np
4+
5+
Vector = Union[Iterable[float], Iterable[int], np.ndarray]
6+
VectorOut = Union[np.float64, int, float]
7+
8+
9+
def euclidean_distance(vector_1: Vector, vector_2: Vector) -> VectorOut:
10+
"""
11+
Calculate the distance between the two endpoints of two vectors.
12+
A vector is defined as a list, tuple, or numpy 1D array.
13+
>>> euclidean_distance((0, 0), (2, 2))
14+
2.8284271247461903
15+
>>> euclidean_distance(np.array([0, 0, 0]), np.array([2, 2, 2]))
16+
3.4641016151377544
17+
>>> euclidean_distance(np.array([1, 2, 3, 4]), np.array([5, 6, 7, 8]))
18+
8.0
19+
>>> euclidean_distance([1, 2, 3, 4], [5, 6, 7, 8])
20+
8.0
21+
"""
22+
return np.sqrt(np.sum((np.asarray(vector_1) - np.asarray(vector_2)) ** 2))
23+
24+
25+
def euclidean_distance_no_np(vector_1: Vector, vector_2: Vector) -> VectorOut:
26+
"""
27+
Calculate the distance between the two endpoints of two vectors without numpy.
28+
A vector is defined as a list, tuple, or numpy 1D array.
29+
>>> euclidean_distance_no_np((0, 0), (2, 2))
30+
2.8284271247461903
31+
>>> euclidean_distance_no_np([1, 2, 3, 4], [5, 6, 7, 8])
32+
8.0
33+
"""
34+
return sum((v1 - v2) ** 2 for v1, v2 in zip(vector_1, vector_2)) ** (1 / 2)
35+
36+
37+
if __name__ == "__main__":
38+
39+
def benchmark() -> None:
40+
"""
41+
Benchmarks
42+
"""
43+
from timeit import timeit
44+
45+
print("Without Numpy")
46+
print(
47+
timeit(
48+
"euclidean_distance_no_np([1, 2, 3], [4, 5, 6])",
49+
number=10000,
50+
globals=globals(),
51+
)
52+
)
53+
print("With Numpy")
54+
print(
55+
timeit(
56+
"euclidean_distance([1, 2, 3], [4, 5, 6])",
57+
number=10000,
58+
globals=globals(),
59+
)
60+
)
61+
62+
benchmark()

0 commit comments

Comments
 (0)