In order to complement the question raised here, I would like to ask how I can find all roots in a certain interval, up to some granularity. Right now I use the poor man's approach and find roots by
import numpy as np
x = np.linspace(0,10,1000)
data = np.sin(x)
roots = (np.abs(data) < 0.1)
# Cluster the data using some other poor man's approach