Probleme mit signal.argrelmax

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
7-X
User
Beiträge: 3
Registriert: Mittwoch 16. Januar 2013, 11:15

Hallo Forum,

ich habe eine Frage wegen der Suche lokaler Maxima und Minima in einem Array.

Code: Alles auswählen

import numpy as np
import scipy as sp
from scipy import signal

timeSeries = np.loadtxt('text.dat',skiprows=1)

localMax1 = signal.argrelmax(timeSeries[0:,1:2].flatten(),axis=0,order=1)
Die Funktion findet nicht zuverlässig die vorhandenen lokalen Maxima

Das problem ist, dass in der Textdatei zum Beispiel drin steht (ist natürlich in wirklichkeit viel länger und mehrere Maxima/minima drin):

TIME W1
94.1094 116.472
94.2127 116.473
94.3160 116.474
94.4192 116.475
94.5018 116.476
94.6051 116.477
94.7084 116.478
94.8116 116.478
94.9149 116.479
95.0182 116.479
95.1008 116.479
95.2040 116.479
95.3073 116.479
95.4106 116.479
95.5138 116.478
95.6171 116.478
95.7204 116.477
95.8030 116.476
95.9062 116.475
96.0095 116.474
96.1128 116.473
96.2160 116.472
96.3193 116.471
96.4019 116.470
96.5052 116.469
96.6084 116.467
96.7117 116.466
96.8149 116.465

die 2. spalte wird auf max/min überprüft.
sobald mehrere exakt gleiche elemente drin stehen, findet argrelmax diese max nicht mehr.

hat jemand eine Idee, was man hier machen könnte?

Ich dachte schon, man kann es mit order anpassen, so dass mehr benachbarte elemente verglichen werden.

order : int, optional

How many points on each side to use for the comparison to consider comparator(n, n+x) to be True.

doch das bringt auch nix...

Matthias
BlackJack

@7-X: Keine Lösung für Dein Problem, aber die zweite Spalte lässt sich deutlich einfacher angeben als ``timeseries[0:, 1:2].flatten()``, nämlich ganz einfach ``timeseries[:, 1]``:

Code: Alles auswählen

In [13]: (ts[0:, 1:2].flatten() == ts[:, 1]).all()
Out[13]: True
Antworten