ECC from pointcloud๏
import numpy as np
import matplotlib.pyplot as plt
import random
from pyEulerCurves import ECC_from_pointcloud, plot_euler_curve
Sample points from the unit circle๏
point_cloud = []
NUMBER_OF_POINTS = 100
random.seed(42)
for i in range(NUMBER_OF_POINTS):
angle = random.uniform(0, 2 * np.pi)
point_cloud.append([np.cos(angle), np.sin(angle)])
point_cloud = np.array(point_cloud)
plt.figure()
plt.axis("scaled")
plt.xlim((-1.2, 1.2))
plt.ylim((-1.2, 1.2))
plt.scatter(point_cloud[:, 0], point_cloud[:, 1])
plt.show()
Full ECC๏
trans = ECC_from_pointcloud(
epsilon=0.8, workers=2 # max filtration # number of CPU cores
)
%%time
ecc = trans.fit_transform(point_cloud)
CPU times: user 19.4 ms, sys: 25.3 ms, total: 44.7 ms
Wall time: 2.43 s
print("{} simplices found".format(trans.num_simplices))
print("highest dimension is {}".format(max(trans.largest_dimension_list)))
5838976 simplices found
highest dimension is 21
# note how the EC is constant after epsilon=0.3
fig, axs = plt.subplots(1)
im0 = plot_euler_curve(ecc, axs, with_lines=True)
ecc[-1]
[0.2911514096055089, 0]
ECC with max_dimension = 2๏
trans = ECC_from_pointcloud(
epsilon=0.8, # max filtration
max_dimension=2, # max dimesion of the simplices
workers=2, # number of CPU cores
)
%%time
ecc = trans.fit_transform(point_cloud)
CPU times: user 13.1 ms, sys: 18.5 ms, total: 31.6 ms
Wall time: 1.22 s
print("{} simplices found".format(trans.num_simplices))
print("highest dimension is {}".format(max(trans.largest_dimension_list)))
9365 simplices found
highest dimension is 2
fig, axs = plt.subplots(1)
im0 = plot_euler_curve(ecc, axs, with_lines=False)