簡體   English   中英

在python中找到兩個局部最小值

[英]Find two local minima in python

我有一個t值列表。 我尋找最小值的代碼如下:

for i in np.arange(0,499,1):
    if t[i]<t[i-1] and t[i]<t[i+1] :                       
        t_min.append(t[i])

我的t值每次都會更改,因此最小值可能出現在開始或結尾處,在這種情況下此代碼將無法工作。 因此,我需要一個適用於t值范圍的通用代碼。

您可以使用%運算符在末尾循環,並在迭代器的長度上增加一個。 這會將您的數組“視為一個圓”,這正是您真正想要的。

t_min = []
for i in range(len(t)):
    if  t[i] < min(t[i - 1], t[(i + 1) % len(t)]):
        t_min.append(t[i])

編輯:修正我取值的范圍,以便第一個元素不會被檢查兩次,這要感謝@Jasper指出

我建議不要使用scipy.signal.argrelmin來遍歷數組,它會找到所有局部最小值。 您可以從中選擇最喜歡的兩個。

from scipy.signal import argrelmin
import numpy as np
t = np.sin(np.linspace(0, 4*np.pi, 500))
relmin = argrelmin(t)[0]
print(relmin)

輸出[187 437]

要將數組視為環繞,請使用argrelmin(t, mode='wrap')


如果沒有回繞,argrelmin不會將數組的開頭和結尾識別為局部最小值的候選對象。 (對“局部最小值”有不同的解釋:一種允許端點,另一種不允許端點。)如果希望在函數達到最小值時將端點包括在內,請執行以下操作:

if t[0] < t[1]:
    relmin = np.append(relmin, 0)
if t[-1] < t[-2]:
    relmin = np.append(relmin, len(t)-1)

現在輸出為[187 437 0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM