summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHind Montassif <hind.montassif@gmail.com>2021-05-07 15:11:24 +0200
committerHind Montassif <hind.montassif@gmail.com>2021-05-07 15:11:24 +0200
commit5c140bbdae08561ce69f0cc05841eb1467aa8eab (patch)
treeebadda78f7b15d32d55b021ba8e7d8753a0c0ec6
parent1ef113ff6f5db7288e4dc4c18c053b18d90dbf1a (diff)
Use PI constant from numpy instead of math
Modify grid points generation incorrect formula
-rw-r--r--src/python/gudhi/datasets/generators/points/torus.py30
1 files changed, 10 insertions, 20 deletions
diff --git a/src/python/gudhi/datasets/generators/points/torus.py b/src/python/gudhi/datasets/generators/points/torus.py
index 2de696b2..5a2b9016 100644
--- a/src/python/gudhi/datasets/generators/points/torus.py
+++ b/src/python/gudhi/datasets/generators/points/torus.py
@@ -8,45 +8,35 @@
# - YYYY/MM Author: Description of the modification
import numpy as np
-import math
-
+import itertools
def generate_random_points(num_points, dim):
# Generate random angles of size num_points*dim
- alpha = 2*math.pi*np.random.rand(num_points*dim)
+ alpha = 2*np.pi*np.random.rand(num_points*dim)
- # Based on angles, construct points of size num_points*dim on a circle and reshape the result in a num_points*2*dim array
- array_points = np.asarray([[np.cos(a), np.sin(a)] for a in alpha]).ravel().reshape(num_points, 2*dim)
+ # Based on angles, construct points of size num_points*dim on a circle and reshape the result in a num_points*2*dim array
+ array_points = np.column_stack([np.cos(alpha), np.sin(alpha)]).reshape(-1, 2*dim)
return array_points
-
def generate_grid_points(num_points, dim):
- num_points_grid = (int(num_points**(1./dim)))**dim
+ num_points_grid = int(num_points**(1./dim))
+ alpha = np.linspace(0, 2*np.pi, num_points_grid, endpoint=False)
- alpha = 2*math.pi*np.random.rand(num_points_grid*dim)
-
- array_points = np.asarray([[np.cos(a), np.sin(a)] for a in alpha]).ravel().reshape(num_points_grid, 2*dim)
+ array_points_inter = np.column_stack([np.cos(alpha), np.sin(alpha)])
+ array_points = np.array(list(itertools.product(array_points_inter, repeat=dim))).reshape(-1, 2*dim)
return array_points
def generate_points(num_points, dim, sample='random'):
if sample == 'random':
print("Sample is random")
- npoints = num_points
+ generate_random_points(num_points, dim)
elif sample == 'grid':
print("Sample is grid")
- npoints = (int(num_points**(1./dim)))**dim
+ generate_grid_points(num_points, dim)
else:
print("Sample type '{}' is not supported".format(sample))
return
-
- # Generate random angles of size num_points*dim
- alpha = 2*math.pi*np.random.rand(npoints*dim)
-
- # Based on angles, construct points of size num_points*dim on a circle and reshape the result in a num_points*2*dim array
- array_points = np.asarray([[np.cos(a), np.sin(a)] for a in alpha]).ravel().reshape(npoints, 2*dim)
-
- return array_points