use*_*614 6 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)
Run Code Online (Sandbox Code Playgroud)
有没有人可以帮我找到正确的方法呢?非常感谢!
我认为你正在寻找argrelmax从scipy.signal.它为您提供1d数组的相对最大值的索引.
from scipy.signal import argrelmax
t=linspace(-4,40,1000)
y=sin(t)
argrelmax(y)[0]
Run Code Online (Sandbox Code Playgroud)
结果
[126 269 412 554 697 840 982]
Run Code Online (Sandbox Code Playgroud)
获取值,使用
y[argrelmax(y)[0]]
Run Code Online (Sandbox Code Playgroud)
编辑:
请注意,它不计算您域中极端的局部最大值.
你走在正确的轨道上。您唯一需要做的额外事情就是对 Werke 数组进行切片。但我认为,找到局部最大值可以简化为:
werte[1:-1][(diff(werte)[:-1]>0)*(diff(werte)[1:]<0)]
Run Code Online (Sandbox Code Playgroud)
@Jamine 说得很对,&而不是*让它读起来更好。
| 归档时间: |
|
| 查看次数: |
6814 次 |
| 最近记录: |