def test_sorted(): np.random.seed(42) for dim in [2, 3]: points = np.random.random((1000, dim)) f = diode.fill_alpha_shapes(points) assert (is_sorted(f, key=lambda x: (x[1], len(x[0]))))
def get_alpha_shapes(coords, exact=True): """ Args: coords: matrix with xyz data Returns: simplices """ return diode.fill_alpha_shapes(coords[:, :3], exact=exact)
def test_square(): points = np.array([[0., 0.], [1., 0.], [0., 1.]]) f = diode.fill_alpha_shapes(points) expected_f = [([0], 0.0), ([1], 0.0), ([2], 0.0), ([0, 1], 0.25), ([0, 2], 0.25), ([1, 2], 0.5), ([0, 1, 2], 0.5)] for s1, s2 in zip(sorted(f), sorted(expected_f)): assert (s1 == s2)
plt.draw() return pc def L2RankDist(rankA, rankB, weightfun): diff = { key: get_rankval(rankA, key) - get_rankval(rankB, key) for key in weightfun } return sum(math.pow(diff[key], 2) * weightfun[key] for key in weightfun) for i in range(num_sam1 + num_sam2): filename = './samples/samples{:d}.csv'.format(i) samples.append(np.genfromtxt(filename, delimiter=',')) simplices = diode.fill_alpha_shapes(samples[-1]) f = d.Filtration(simplices) m = d.homology_persistence(f) dgms = d.init_diagrams(m, f) dgms_list.append(dgms[homology_dimension]) local_birth_max = np.max([pt.birth for pt in dgms[homology_dimension]]) birth_max = max(birth_max, local_birth_max) local_death_max = np.max([pt.death for pt in dgms[homology_dimension]]) death_max = max(death_max, local_death_max) grid = (birth_max + death_max) / 100 rankfuns = [] for dgm in dgms_list: print(dgm) bvals = np.arange(0.0, np.max([pt.birth for pt in dgm]), grid)
distances = [get_distance(other_point, point) for other_point in trees] trees = trees[np.argpartition(distances, num_points)] samples.append(trees[:num_points]) # closest num_points samples = np.asarray(samples) for i in range(len(samples)): np.savetxt('./samples/samples{:d}.csv'.format(i), samples[i], delimiter=',') # Constructing the persistent homology diagrams and distance matrix dgms_list = [] for i in range(len(samples)): sample_set = samples[i] simplices = diode.fill_alpha_shapes(sample_set) f = d.Filtration(simplices) m = d.homology_persistence(f) dgms = d.init_diagrams(m, f) dgms_list.append(dgms[homology_dimension]) distance_matrix = np.zeros((len(dgms_list), len(dgms_list))) for i in range(len(dgms_list)): for j in range(i): # Chose Wasserstein, q=1 to emphasise many near-diagonal points dist = d.wasserstein_distance(dgms_list[i], dgms_list[j], q=1) distance_matrix[i, j] = dist distance_matrix[j, i] = distance_matrix[i, j] np.savetxt('./processed_data/dist_matrix.csv', distance_matrix, delimiter=',')