6

我在 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)

有没有人可以帮助我找到正确的方法?十分感谢!

4

2 回答 2

6

我想你正在寻找argrelmax,从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]

要获取值,请使用

y[argrelmax(y)[0]]

编辑:

请注意,它不计算域极端处的局部最大值。

于 2013-09-19T17:44:38.440 回答
2

你在正确的轨道上。您唯一需要做的就是对 Werke 数组进行切片。但我认为,找到局部最大值可以简化为:

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

@Jamine 非常正确,&而不是*让它读起来更好。

于 2013-09-19T15:58:33.000 回答