examples/rips/rips-pairwise.py
author Dmitriy Morozov <dmitriy@mrzv.org>
Mon Jul 25 23:21:29 2011 -0700 (10 months ago)
branchdev
changeset 244 66235db8d8b7
parent 147d39a20acb253
permissions -rw-r--r--
Added cohomology/candidates counter to i/t/cohomology-persistence.hpp
dmitriy@126
     1
#/usr/bin/env python
dmitriy@126
     2
dmitriy@126
     3
dmitriy@126
     4
from    dionysus    import Rips, PairwiseDistances, StaticPersistence, Filtration, points_file, \
dmitriy@126
     5
                           ExplicitDistances, data_dim_cmp
dmitriy@126
     6
from    sys         import argv, exit
dmitriy@126
     7
import  time
dmitriy@126
     8
dmitriy@145
     9
def main(filename, skeleton, max):
dmitriy@145
    10
    points = [p for p in points_file(filename)]
dmitriy@145
    11
    distances = PairwiseDistances(points)
dmitriy@147
    12
    # distances = ExplicitDistances(distances)           # speeds up generation of the Rips complex at the expense of memory usage
dmitriy@145
    13
    rips = Rips(distances)
dmitriy@145
    14
    print time.asctime(), "Rips initialized"
dmitriy@126
    15
dmitriy@181
    16
    simplices = Filtration()
dmitriy@145
    17
    rips.generate(skeleton, max, simplices.append)
dmitriy@145
    18
    print time.asctime(), "Generated complex: %d simplices" % len(simplices)
dmitriy@126
    19
dmitriy@145
    20
    # While this step is unnecessary (Filtration below can be passed rips.cmp), 
dmitriy@145
    21
    # it greatly speeds up the running times
dmitriy@145
    22
    for s in simplices: s.data = rips.eval(s)
dmitriy@145
    23
    print time.asctime(), simplices[0], '...', simplices[-1]
dmitriy@126
    24
dmitriy@181
    25
    simplices.sort(data_dim_cmp)             # could be rips.cmp if s.data for s in simplices is not set
dmitriy@145
    26
    print time.asctime(), "Set up filtration"
dmitriy@126
    27
dmitriy@181
    28
    p = StaticPersistence(simplices)
dmitriy@145
    29
    print time.asctime(), "Initialized StaticPersistence"
dmitriy@126
    30
dmitriy@145
    31
    p.pair_simplices()
dmitriy@145
    32
    print time.asctime(), "Simplices paired"
dmitriy@126
    33
dmitriy@145
    34
    print "Outputting persistence diagram"
dmitriy@181
    35
    smap = p.make_simplex_map(simplices)
dmitriy@145
    36
    for i in p:
dmitriy@145
    37
        if i.sign():
dmitriy@181
    38
            b = smap[i]
dmitriy@126
    39
dmitriy@145
    40
            if b.dimension() >= skeleton: continue
dmitriy@126
    41
dmitriy@181
    42
            if i.unpaired():
dmitriy@145
    43
                print b.dimension(), b.data, "inf"
dmitriy@145
    44
                continue
dmitriy@132
    45
dmitriy@181
    46
            d = smap[i.pair()]
dmitriy@145
    47
            print b.dimension(), b.data, d.data
dmitriy@132
    48
dmitriy@145
    49
if __name__ == '__main__':
dmitriy@145
    50
    if len(argv) < 4:
dmitriy@145
    51
        print "Usage: %s POINTS SKELETON MAX" % argv[0]
dmitriy@145
    52
        exit()
dmitriy@132
    53
dmitriy@145
    54
    filename = argv[1]
dmitriy@145
    55
    skeleton = int(argv[2])
dmitriy@145
    56
    max = float(argv[3])
dmitriy@132
    57
dmitriy@145
    58
    main(filename, skeleton, max)