예제 #1
0
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]))))
예제 #2
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)
예제 #3
0
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=',')