I have a 2-D latitude-time zonal wind netCDF dataset (such as this small sample from ERA-Interim) from which I want to find all local maxima of the zonal wind as a function of latitude, for each time step. The output should be a list of latitudes (possibly empty) for each time step.

I would prefer to use mostly python, cdo and/or nco, if possible. I can use the derivative function in python xarray and specify the latitude dimension, for example, and then find roots of this new function subject to a condition on the second derivate, but I've not come across a function for finding zeroes/roots of a 2-D array along a specific dimension. Is there a more efficient, preferable way of going about this task?

Please let me know if this is not appropriate for the Earth Science Stack Exchange and where I should rather post the question if so.

  • 1
    $\begingroup$ If you're using xarray, you have direct access to the values of the array and you can apply pre-existing local extrema-finding functions, such as docs.scipy.org/doc/scipy/reference/generated/… or docs.scipy.org/doc/scipy/reference/generated/… (which allows you to set a minimum distance between consecutive minima/maxima). Would that help? $\endgroup$
    – Erik
    Jan 6, 2022 at 4:44
  • $\begingroup$ @Erik, thank you, yes, scipy.signal.find_peaks seems to be particularly flexible and useful. I was hoping for something that could possibly estimate the location of a maximum/minimum between grid locations, but that's not strictly necessary. Could you suggest an efficient way of applying scipy.signal.find_peaks over order 10^5 timesteps? Or is that a separate question? $\endgroup$ Jan 6, 2022 at 8:57
  • 1
    $\begingroup$ Hmm, no I suspect (but leave this open to other commenters) that these types of statistics about local extrema are computationally expensive; algorithms must check each sample, possibly multiple times. Any speedup can probably only be achieved using your computing resources maximally, e.g.: a multiprocessing approach following docs.python.org/3/library/multiprocessing.html can at least make sure you process 8 (or more) NetCDF files in parallel. $\endgroup$
    – Erik
    Jan 6, 2022 at 14:13


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.