如何在用户提供的范围内找到局部最大值?

时间:2017-03-25 09:21:05

标签: python

我的数据集如下:

data=array([ 0.56660112,  0.76309473,  0.69597908,  0.38260156,  0.24346445,
            0.56021785,  0.24109326,  0.41884061,  0.35461957,  0.54398472,
            0.59572658,  0.92377974])

用户提供的索引数组(可以变化):

index=[3,5,7,11]

maxima应该在3到5,5到7,7到11之间计算,并且同样也应该将所有最大值索引附加在另一个列表中。

fa= [0.38260156, 0.24346445, 0.56021785]   
sa= [0.56021785, 0.24109326, 0.41884061]   
ta= [0.41884061, 0.35461957, 0.54398472, 0.59572658, 0.92377974]

在内部它应该根据索引大小进行拆分,并且局部最大值的索引应该附加在列表中。

1 个答案:

答案 0 :(得分:0)

numpy的argmax(array)函数将返回给定数组中最大值的索引。

maxValueInArray = np.argmax(data)

要获得数组范围内的最大值索引,您只需执行此操作:

maxValueInRange = np.argmax(data[beginning:end]])

然后循环遍历所有索引范围,收集所有最大值索引。然后,您可以在以后收集所有实际值,就像现在它们的索引如何或在循环超过最大值时将它们附加到数组。给定像示例中的小尺寸阵列,无论如何都不会有明显的性能差异。

这是循环范围并在特定范围内追加最大值索引的一种方法:

from numpy import array
import numpy as np
maximaArray = []

data=array([ 0.56660112,  0.76309473,  0.69597908,  0.38260156,  0.24346445,
        0.56021785,  0.24109326,  0.41884061,  0.35461957,  0.54398472,
        0.59572658,  0.92377974])

index=[3,5,7,11]

for i in range(len(index)):
  if i+1 == len(index):
    break
  maximaArray.append(np.argmax(data[index[i]:index[i+1]+1]))

>>> maximaArray
[2, 0, 4]

2,0和4对应于这些数组中的索引:

fa= [0.38260156, 0.24346445, 0.56021785]   
sa= [0.56021785, 0.24109326, 0.41884061]   
ta= [0.41884061, 0.35461957, 0.54398472, 0.59572658, 0.92377974]