Python: spiknutí v čase pomocí jediného sloupce souboru

0

Otázka

Musím napsat funkci, která mi umožňuje najít místní max a min z řady hodnot.

Data pro funkce x, y pro každý "vrchol". Výstupem jsou 4 vektory, které obsahují x, y max a min "vrcholy".

Najít max vrcholy, musí "stát" na každý datový bod a zkontrolujte, zda je klisna nebo méně než sousedé na obou stranách s cílem rozhodnout, zda je vrchol (uložit jako max/min peak). Body na obou koncích mají jen 1 souseda, nepovažuji za ty pro tuto analýzu.

Pak napsat program k čtení dat souboru a vyvolat funkce pro výpočet maxima. Program musí vytvořit graf ukazuje zadané data se vypočítá vrcholy.

1. soubor je Pole float64 (2001,) velikost. Všechna data jsou ve sloupci 0. Tento soubor představuje amplitudy signálu v čase, četnost odběru vzorků je 200Hz. Asume počáteční čas je 0.

Graf by měl vypadat takto

Program musí také generovat .xls soubor, který ukazuje, 2 stoly; 1 min vrcholy, a další s max vrcholy. Každá tabulka musí být s názvem a skládá se ze 2 sloupce, jeden s časem, na které vrcholy se vyskytují, a další s amplituda každého vrcholu.

Žádné Pandy povoleno.

first file is a .txt file, and is single column, 2001 rows total
0
0.0188425
0.0376428
0.0563589
0.0749497
0.0933749
0.111596
0.129575
0.147277
0.164669
0.18172
...

Aktuální pokus:

import numpy as np
import matplotlib.pyplot as plt

filename = 'location/file_name.txt'
T = np.loadtxt(filename,comments='#',delimiter='\n')

x = T[::1]  # all the files of column 0 are x vales

a = np.empty(x, dtype=array)
y = np.linspace[::1/200]

X, Y = np.meshgrid(x,y)
graph matplotlib python spyder
2021-11-23 23:57:10
1

Nejlepší odpověď

0

To dělá to, co jste se zeptat. Musel jsem generovat náhodná data, od doby, co jsi nechtěl sdílet vaše. Jistě můžete budovat své tabulky z minima a maxima hodnot.

import numpy as np
import matplotlib.pyplot as plt

#filename = 'location/file_name.txt'
#T = np.loadtxt(filename,comments='#',delimiter='\n')
#
#y = T[::1]  # all the files of column 0 are x vales

y = np.random.random(200) * 2.0

minima = []
maxima = []
for i in range(0,y.shape[0]-1):
    if y[i-1] < y[i] and y[i+1] < y[i]:
        maxima.append( (i/200, y[i]) )
    if y[i-1] > y[i] and y[i+1] > y[i]:
        minima.append( (i/200, y[i]) )

minima = np.array(minima)
maxima = np.array(maxima)
print(minima)
print(maxima)

x = np.linspace(0, 1, 200 )

plt.plot( x, y )
plt.scatter( maxima[:,0], maxima[:,1] )
plt.show()
2021-11-24 00:23:21

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................