ในขณะที่คำถามนี้เก่าจริงๆ ฉันเชื่อว่ามีวิธีการที่ง่ายกว่ามากใน numpy (ซับเดียว)
import numpy as np
list = [1,3,9,5,2,5,6,9,7]
np.diff(np.sign(np.diff(list))) #the one liner
#output
array([ 0, -2, 0, 2, 0, 0, -2])
ในการหาค่าสูงสุดหรือต่ำสุดในพื้นที่เราต้องการค้นหาเมื่อความแตกต่างระหว่างค่าในรายการ (3-1, 9-3 ... ) เปลี่ยนจากบวกเป็นลบ (สูงสุด) หรือลบเป็นบวก (นาที) ดังนั้นก่อนอื่นเราพบความแตกต่าง จากนั้นเราจะพบเครื่องหมายแล้วเราจะพบการเปลี่ยนแปลงในเครื่องหมายโดยรับความแตกต่างอีกครั้ง (เรียงลำดับเหมือนอนุพันธ์อันดับหนึ่งและสองในแคลคูลัสมีเพียงเราเท่านั้นที่มีข้อมูลไม่ต่อเนื่องและไม่มีฟังก์ชันต่อเนื่อง)
ผลลัพธ์ในตัวอย่างของฉันไม่มี extrema (ค่าแรกและค่าสุดท้ายในรายการ) เช่นเดียวกับแคลคูลัสถ้าอนุพันธ์อันดับสองเป็นลบคุณจะมี max และถ้ามันเป็นบวกคุณจะมี min
ดังนั้นเราจึงมีการจับคู่ดังต่อไปนี้:
[1, 3, 9, 5, 2, 5, 6, 9, 7]
[0, -2, 0, 2, 0, 0, -2]
Max Min Max