Python:如何从1D数组或lis中获取本地最大值

2024-05-03 07:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,我有一个问题找不到答案。。。希望有人能帮忙: 我需要得到从csv文件导入的数据集的所有本地最大值的列表。 值的范围从0到0.5左右。

我只需要得到一个数据行(“Werte”,array或“N”,list)的本地最大值列表,就可以对它们进行统计。

这就是我得到的:

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)

有人能帮我找到正确的方法吗? 非常感谢!


Tags: columnscsv数据inimportnumpy列表data
2条回答

你在正确的轨道上。你需要做的唯一额外的事情就是切掉维克阵列。 但我认为,找到局部最大值可以简化为:

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

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

我想你在找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]]

编辑:

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

相关问题 更多 >