Python:如何从1D阵列或列表中获取局部最大值

时间:2013-09-19 15:20:13

标签: python numpy local

我是Python的新手,我遇到了一个问题,我无法用找到的答案来解决...希望有人可以提供帮助: 我需要获取从csv文件导入的数据集的所有本地最大值的列表。 值范围从0到0.5左右。

我只需要获取一个数据行(“Werte”,数组或“N”,列表)的局部最大值列表来对它们进行统计。

这就是我所拥有的:

import numpy as np
from numpy import *

N = []   

file = open('C:/Auswertung/PEE/PEE_L_1_O_130702-1.1.csv', 'r') 
Probe = file.readline()         # lese Inhalt zeilenweise in Listen
Header = file.readline()
data = file.readlines()

for row in data:
    columns = row.split(";")       # Trenne Zeilen bei ';' 
    N.append(float(columns[1]))

Werte = np.array([N])

# one try here: only gives me a set of 1s...    
c = (diff(sign(diff(Werte))) < 0).nonzero()[0] + 1 # local max
print(c)

有没有人可以帮我找到正确的方法呢? 非常感谢你!

2 个答案:

答案 0 :(得分:6)

我认为您正在寻找来自argrelmax的{​​{1}}。它为您提供了1d数组的相对最大值的索引。

scipy.signal

结果

from scipy.signal import argrelmax
t=linspace(-4,40,1000)
y=sin(t)
argrelmax(y)[0]

获取值,使用

[126 269 412 554 697 840 982]

编辑:

请注意,它不会计算您网域极端的本地最大值。

答案 1 :(得分:2)

你走在正确的轨道上。你唯一需要的是切片Werke数组。 但我认为,找到本地最大值可以简化为:

 werte[1:-1][(diff(werte)[:-1]>0)*(diff(werte)[1:]<0)]

@Jamine非常正确,&代替*使其更好。