【发布时间】:2019-05-23 16:18:06
【问题描述】:
我正在尝试创建一些代码来返回数值数组的“峰值”(或局部最大值)的位置和值。
例如,列表arr = [0, 1, 2, 5, 1, 0] 在3 位置有一个峰值,其值为5(因为arr[3] 等于5)。
数组的第一个和最后一个元素不会被视为峰值(在数学函数的上下文中,您不知道之后和之前是什么,因此,您不知道它是峰值还是不是)。
def pick_peaks(arr):
print(arr)
posPeaks = {
"pos": [],
"peaks": [],
}
startFound = False
n = 0
while startFound == False:
if arr[n] == arr[n+1]:
n += 1
else:
startFound = True
endFound = False
m = len(arr) - 1
while endFound == False:
if arr[m] == arr[m-1]:
m -= 1
else:
endFound = True
for i in range(n+1, m):
if arr[i] == arr[i-1]:
None
elif arr[i] >= arr[i-1] and arr[i] >= arr[i+1]:
posPeaks["pos"].append(i)
posPeaks["peaks"].append(arr[i])
return posPeaks
我的问题是高原。 [1, 2, 2, 2, 1] 有一个峰值,而[1, 2, 2, 2, 3] 没有。当高原为峰时,记录高原的第一个位置。
感谢任何帮助。
【问题讨论】:
-
在第一个高原示例中,高原的值为 2,但它的位置是什么?
-
@quamrana 啊是的我忘了加这个,当高原是高峰时,使用高原的第一个位置。
-
一些要点 1. [] 创建列表,而不是数组。 2. 尽可能使用列表推导、映射...而不是 for/while 循环 3. 寻找 enumerat 和 argmax 函数
标签: python list dictionary comparison-operators