scipy.optimize.minimize выполняется несколько раз в некоторых строках при применении к фрейму данных Pandas с или без многопроцессорной обработки

Есть несколько хороших решений, но это зависит от того, что вам нужно.

Просто diff(tt) возвращает различия.

Вы хотите определить, когда вы переходите от увеличения значений к уменьшающимся значениям. Один из способов сделать это - @Ben:

 diff(sign(diff(tt)))==-2

. Проблема заключается в том, что это только обнаружит изменения, которые идут немедленно от строго возрастающего до строгого уменьшения.

Небольшое изменение позволит повторить значения на пике (возврат TRUE для последнего значения пикового значения):

 diff(diff(x)>=0)<0

Затем вам просто нужно правильно нанести передний и задний, если вы хотите обнаружить максимумы в начале или конце

Вот все, что связано с функцией (включая поиск долин):

 which.peaks <- function(x,partial=TRUE,decreasing=FALSE){
     if (decreasing){
         if (partial){
             which(diff(c(FALSE,diff(x)>0,TRUE))>0)
         }else {
             which(diff(diff(x)>0)>0)+1
         }
     }else {
         if (partial){
             which(diff(c(TRUE,diff(x)>=0,FALSE))<0)
         }else {
             which(diff(diff(x)>=0)<0)+1
         }
     }
 }
0
задан lleiou 26 February 2019 в 05:44
поделиться