Source code for CIMAP.find_cuts

import numpy as np
from .utils import smooth

__all__ = ['find_cuts']

[docs] def find_cuts(distance): '''Function for the automatic identification of the cutting point on the dendrograms `[1]`_. :Input: * **distance** (*numpyarray*): the distance array that is the third column of the linkage function output. :Output: * **cuts** (*list*): list containing the optimal cutting point for each type of cut used.''' dist_diff = np.diff(distance) mean = np.mean(dist_diff[round(0.5*len(dist_diff))-1:]) std = np.std(dist_diff[round(0.5*len(dist_diff))-1:], ddof=1) x = smooth(dist_diff,5) i_sm = len(x)-1 while x[i_sm]> x[i_sm-1] and i_sm > 0.8*len(x): if x[i_sm]> x[i_sm-1]: i_sm-=1 idx3 = i_sm+2 if any(list(dist_diff > mean)): idx1 = list(dist_diff > mean).index(True)+1 else: idx1 = len(dist_diff)+1 if any(list(dist_diff > mean+std)): idx2 = list(dist_diff > mean+std).index(True)+1 else: idx2 = len(dist_diff)+1 cuts =[idx1,idx2,idx3] return cuts