Maximum value that satisfies a specific function
arange can build a descending vector. Building an ascending vector and reversing it seems wasteful. Consider

a = np.arange(10, 0, -0.01)

matrix1 is never modified, but its _find_mean is recomputed on each iteration. Yet another waste. Compute it once.
Instead of linear search, you may want to consider a bisection of the search interval.
else: pass achieves nothing, and can be safely omitted.
_find_mean is a kinda strange name for a function which 


  finds the location of the maximum element in a matrix