這是我在串列中得到的圖表 
我的問題是如何獲得串列中每個時期的每個最小值和最大值?按照圖表,我想在點處獲得第一個最大值,在點處獲得第1一個最小值,在點處獲得30第二個最大值,在點處獲得62第二個最小值94
我試過了,但它得到了錯誤的點,因為串列中的值不穩定,正如你在圖表上看到的
這是我嘗試過的代碼
import matplotlib.pyplot as plt
max_1 = 0
max_1_pos = 0
min_1_pos = 0
max_2 = 0
max_2_pos = 0
min_2_pos = 0
img_list_pix =[218, 225, 224, 224, 224, 220, 217, 215, 216, 216,
216, 215, 214, 215, 214, 214, 213, 210, 210, 205,
207, 204, 205, 201, 200, 201, 201, 197, 202, 203,
196, 196, 196, 196, 198, 198, 199, 202, 202, 205,
205, 205, 207, 206, 208, 207, 209, 214, 212, 213,
215, 218, 220, 219, 218, 220, 223, 222, 224, 224,
224, 222, 225, 222, 222, 222, 222, 223, 223, 221,
223, 222, 223, 219, 218, 216, 215, 214, 212, 212,
211, 211, 207, 206, 205, 204, 202, 199, 199, 198,
197, 195, 193, 191, 191, 193, 191, 196]
for i in range(len(img_list_pix)):
if img_list_pix[i] >= max_1:
max_1 = img_list_pix[i]
max_1_pos = i
else:
break
min_1 = max_1
print(f"max_1:{max_1} | i:{i}")
for i in range(max_1_pos 1, len(img_list_pix)):
if img_list_pix[i] <= min_1:
min_1 = img_list_pix[i]
min_1_pos = i
else:
break
max_2 = min_1
print(f"min_1:{min_1} | i:{i}")
for i in range(min_1_pos 1, len(img_list_pix)):
if img_list_pix[i] >= max_2:
max_2 = img_list_pix[i]
max_2_pos = i
else:
break
min_2 = max_2
print(f"max_2:{max_2} | i:{i}")
for i in range(max_2_pos 1, len(img_list_pix)):
if img_list_pix[i] <= min_2:
min_2 = img_list_pix[i]
min_2_pos = i
else:
break
print(f"min_2:{min_2} | i:{i}")
結果
max_1:225 | i:2
min_1:215 | i:8
max_2:216 | i:11
min_2:214 | i:13
提前致謝。
uj5u.com熱心網友回復:
您應該首先使用以下內容過濾您的串列:
def low_pass_filter(L, alpha = 0.2):
filtered_L = []
for i in range(1,len(L)-1):
filtered_L.append(L[i-1] * alpha L[i] * (1-2*alpha) L[i 1]*alpha)
return filtered_L
然后,您可以使用以下命令找到串列的極值:
def extremums(L):
"""
This function will only find the local extremums where the derivative should be zero
"""
maximums = {} #index -> value
minimums = {} #index -> value
for i in range(1,len(L)-1):
if L[i-1] <= L[i] > L[i 1] or L[i-1] < L[i] >= L[i 1]:
maximums[i] = L[i] #add this value to maximums
elif L[i-1] >= L[i] < L[i 1] or L[i-1] > L[i] <= L[i 1]:
minimums[i] = L[i] #add this value to manimums
return maximums, minimums
L = [1, 2, 3, 1, 2, 0, 5, 8, 7]
print("Maximums :",extremums(L)[0])
print("Minimums :",extremums(L)[1])
輸出:
Maximums : {2: 3, 4: 2, 7: 8}
Minimums : {3: 1, 5: 0}
- 如果極值在串列的開頭或結尾,則不會輸出
- 輸出是一個包含“index->??value”的字典
uj5u.com熱心網友回復:
這是否有幫助:
img_list_pix = [218, 225, 224, 224, 224, 220, 217, 215, 216, 216,
216, 215, 214, 215, 214, 214, 213, 210, 210, 205,
207, 204, 205, 201, 200, 201, 201, 197, 202, 203,
196, 196, 196, 196, 198, 198, 199, 202, 202, 205,
205, 205, 207, 206, 208, 207, 209, 214, 212, 213,
215, 218, 220, 219, 218, 220, 223, 222, 224, 224,
224, 222, 225, 222, 222, 222, 222, 223, 223, 221,
223, 222, 223, 219, 218, 216, 215, 214, 212, 212,
211, 211, 207, 206, 205, 204, 202, 199, 199, 198,
197, 195, 193, 191, 191, 193, 191, 196]
def getminmax(L, i):
_min = min(L[i:])
_max = max(L[i:])
return (_min, L[i:].index(_min) i), (_max, L[i:].index(_max) i)
for i in [0, 29, 61, 93]:
print(getminmax(img_list_pix, i))
uj5u.com熱心網友回復:
您修改后的代碼將如下所示:
F1 = 0
F1_lim = 15
for i in range(len(img_list_pix)):
if img_list_pix[i] > max_1:
max_1 = img_list_pix[i]
max_1_pos = i
F1 = 0
elif F1 <= F1_lim:
F1 = 1
if img_list_pix[i] > max_1:
max_1 = img_list_pix[i]
max_1_pos = i
F1 = 0
else:
F1 = 0
break
print(f"max_1:{max_1} | i:{max_1_pos}")
min_1 = max_1
for i in range(max_1_pos 1, len(img_list_pix)):
if img_list_pix[i] < min_1:
min_1 = img_list_pix[i]
min_1_pos = i
F1 = 0
elif F1 <= F1_lim:
F1 = 1
continue
else:
F1 = 0
break
print(f"min_1:{min_1} | i:{min_1_pos}")
max_2 = min_1
for i in range(min_1_pos 1, len(img_list_pix)):
if img_list_pix[i] > max_2:
max_2 = img_list_pix[i]
max_2_pos = i
F1 = 0
elif F1 <= F1_lim:
F1 = 1
if img_list_pix[i] > max_2:
max_2 = img_list_pix[i]
max_2_pos = i
F1 = 0
else:
F1 = 0
break
print(f"max_2:{max_2} | i:{max_2_pos}")
min_2 = max_2
for i in range(max_2_pos 1, len(img_list_pix)):
if img_list_pix[i] < min_2:
min_2 = img_list_pix[i]
min_2_pos = i
F1 = 0
elif F1 <= F1_lim:
F1 = 1
continue
else:
F1 = 0
break
print(f"min_2:{min_2} | i:{min_2_pos}")
F1_lim是要與之比較的已建立值的索引之后的索引數,可由用戶更改。此代碼將給出以下結果:
max_1:225 | i:1
min_1:196 | i:30
max_2:225 | i:62
min_2:191 | i:93
該代碼將給出谷值或峰值的最小值或最大值的第一次出現,例如因為min_2它將回傳93。為了得到最后一個與相同大小93即96為min_2在指定范圍內F1_lim = 15,小于和大于運營商必須由被取代小于等于和大于等于運算子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/321556.html
下一篇:C中二維字符陣列的輸入
