m = 0; M = 200 mask = [(m < edges) & (edges < M)] >>> edges[mask] array([ 37.4789683 , 87.07491593, 136.67086357, 186.2668112 ])
Let you work with a smaller dataset to make it easier to understand:
np.random.seed(0) values = np.random.uniform(0, 100, 10) values.sort() >>> values array([ 38.34415188, 42.36547993, 43.75872113, 54.4883183 , 54.88135039, 60.27633761, 64.58941131, 71.51893664, 89.17730008, 96.36627605]) # Histogram using eg 10 buckets perc, edges = np.histogram(values, bins=10, weights=np.zeros_like(values) + 100./values.size) >>> perc array([ 30., 0., 20., 10., 10., 10., 0., 0., 10., 10.]) >>> edges array([ 38.34415188, 44.1463643 , 49.94857672, 55.75078913, 61.55300155, 67.35521397, 73.15742638, 78.9596388 , 84.76185122, 90.56406363, 96.36627605]) m = 0; M = 50 mask = (m <= edges) & (edges < M) >>> mask array([ True, True, True, False, False, False, False, False, False, False, False], dtype=bool) >>> edges[mask] array([ 38.34415188, 44.1463643 , 49.94857672]) >>> perc[mask[:-1]][:-1] array([ 30., 0.]) m = 40; M = 60 mask = (m < edges) & (edges < M) >>> edges[mask] array([ 44.1463643 , 49.94857672, 55.75078913]) >>> perc[mask[:-1]][:-1] array([ 0., 20.])