2

The function below uses slices to get the maximum value between 2 indexes at once. So it gets the maximum value between 0 and 10 and then 10 and 12 and such. The function is derived from the answer to this post post. Is there a way I could could replace the list comprehensions in the form of a pandas function like pd.Series(). Or if possible do it as a numpy function.

list_ = np.array([9887.89, 9902.99, 9902.99, 9910.23, 9920.79, 9911.34, 9920.01, 9927.51, 9932.3, 9932.33, 9928.87, 9929.22, 9929.22, 9935.24, 9935.24, 9935.26, 9935.26, 9935.68, 9935.68, 9940.5])
indexes = np.array([0,10,12,14])
chunks = np.split(list_, indexes[1:-1])
MAX=([c.max() for c in chunks])
tony selcuk
  • 709
  • 3
  • 11

1 Answers1

3

I would recommend this:

MAX = np.maximum.reduceat(list_,indexes[:-1])

output:

array([9932.33, 9929.22, 9940.5 ])

Another way that will NOT increase your performance and is merely a replacement for list comprehension in your answer (in fact, might even be slightly slower):

max = np.vectorize(np.max)
MAX = max(chunks)
Ehsan
  • 12,072
  • 2
  • 20
  • 33
  • Is there a way I could get the indexes of `9932.33, 9929.22, 9940.5` as well. I tried to implement `argmax` to it howwver it didnt workout – tony selcuk Jan 29 '21 at 00:57
  • @tonyselcuk Quite a different question but does this post answer your question https://stackoverflow.com/a/41835843/4975981? – Ehsan Jan 29 '21 at 03:21
  • @tonyselcuk Glad it resolved. Please feel free to accept the answer to close the question. Thank you. – Ehsan Jan 29 '21 at 20:05
  • Sorry about the delay just did it now. – tony selcuk Jan 29 '21 at 21:01