6

私はPythonでかなり新しく、見つかった答えで解決できなかった問題があります...誰かが助けてくれることを願っています.csvファイルからインポートされたデータセットのすべてのローカル最大値のリストを取得する必要があります. 値の範囲は 0 から 0.5 程度です。

それらの統計を行うには、1 つのデータ行 (「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。1次元配列の相対最大値のインデックスを提供します。

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 に答える