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()
../_images/9f66d2517d7de658943a63b9bd455bf7ee3a39afa3097f0745e044ee1a5fa447.png

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)
../_images/1529c377bff75d9718c5610598159cd0158949ce36c528d244d3df00fd2f59e4.png
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)
../_images/43e4318719a66d89d304dc232f5b1ae02f923abd7aee5218c35021e131bb6e65.png