I need to find the percentile where a list of values is higher than a threshold. I am doing this in the context of optimization, so it important that the answer is precise. I am also trying to minimize compute time. I have a O(n) solution which is not very precise, then I use scipy's minimize optimizer to find the exact solution, which is time-intensive. The numbers in my problem are NOT normally distributed.
Is there a more time-efficient way to do this while preserving precision?
from scipy.optimize import minimize my_vals =  threshold_val = 0.065 for i in range(60000): my_vals.append(np.random.normal(0.05, 0.02)) count_vals = 0. for i in my_vals: count_vals += 1 if i > threshold_val: break percKnot = 100 * (count_vals/len(my_vals)) print minimize(lambda x: abs(np.percentile(my_vals, x) - threshold_val), percKnot, bounds=[[0,100]], method='SLSQP', tol=10e-9).x