python - 如何获取列表中每个周期的最小值和最大值?
问题描述
我的问题是如何获得列表中每个时期的每个最小值和最大值?按照图表,我想得到点的第一个最大值,点的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
提前致谢。
解决方案
您应该首先使用以下内容过滤您的列表:
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”的字典
推荐阅读
- vue.js - 用于动态数组推送的 vue 数组反应性
- javascript - 子域上的 PWA - 一起安装
- elasticsearch - ElasticSearch - 带截止的普通查询,只有当所有低频词都匹配时才对高频词进行评分
- c# - 如何编写一个程序,给一个班级的学生打 3 分,然后返回所有三个分数的平均值
- node.js - 如何在 Node.js 中实现 PDF 下载功能?
- c - 埃拉托色尼筛 - C 语言实现
- angular - 禁用 Chrome 自动填充(再次)70.0.3538.67
- python - 从大量图像(*.jpg)和标签(*.mat)制作张量流数据集
- spring - Spring - 尝试将新员工插入到 mySQL - 绑定参数 [1] 作为 [VARCHAR] - [null]
- java - 扩展非抽象 jpa 实体类