python/cindep.py
changeset 0 0efde00f9229
equal deleted inserted replaced
-1:000000000000 0:0efde00f9229
       
     1 #!/usr/bin/python
       
     2 
       
     3 import pylab as pl
       
     4 from makezero import makezero
       
     5 
       
     6 def cindep(S, gap=None):
       
     7     E = pl.finfo(float).eps
       
     8 
       
     9     if gap == None:
       
    10         gap = 1e8
       
    11 
       
    12     r, c = pl.atleast_2d(S).shape
       
    13 
       
    14     if r>c:
       
    15         ind = 0
       
    16     else:
       
    17         sigma = pl.svd(S)[1]
       
    18         l = len(sigma)
       
    19         if(sigma[-1]/sigma[0] < (E*max(1, c))):
       
    20             ind = 0
       
    21         else:
       
    22             if pl.any(sigma[:-1]/sigma[1:] >= gap):
       
    23                 ind = 0
       
    24             else:
       
    25                 ind = 1
       
    26     if ind:
       
    27         b = pl.array([])
       
    28 
       
    29     else:
       
    30         A, B = S[r-1,:], S[:r-1,:] 
       
    31         b = pl.lstsq(B.T, A.T)[0].T
       
    32         b = makezero(b, gap)
       
    33         b = b.squeeze()
       
    34     return pl.atleast_2d(b)
       
    35 
       
    36 if __name__== "__main__":
       
    37     pass