2017-07-25 6 views
1

Ich möchte die Ergebnisse von Zeitreihen (Sensordaten) in einer HDF5-Datei speichern. Ich kann meinem Datensatz keine Werte zuordnen. Klar, ich tue etwas falsch, ich bin nur nicht sicher, was ...Zeitreihenspeicher im HDF5-Format

Der Code:

from datetime import datetime, timezone 
import h5py 

TIME_SERIES_FLOAT = np.dtype([("time", h5py.special_dtype(vlen=str)), 
           ("value", np.float)]) 

h5 = h5py.File('balh.h5', "w") 
dset = create_dataset('data', (1, 2), chunks=True, maxshape=(None, 2), dtype=TIME_SERIES_FLOAT) 
dset[0]['time'] = datetime.now(timezone.utc).astimezone().isoformat() 
dset[0]['value'] = 0.0 

Dann wird der Update-Code des Datensatzes ändert die Größe und Werte hinzufügt. Klar, dass pro Wert zu tun ist ineffizient:

size = list(dset.shape) 
size[0] += 1 
dset.resize(tuple(size)) 
dset[size[0]-1]['time'] = datetime.now(timezone.utc).astimezone().isoformat() 
dset[size[0]-1]['value'] = value 

Eine viel bessere Methode, einige Daten in eine np.array zu sammeln wäre und dann hinzufügen, dass jeder so oft ...

Ist das sinnvoll ...

Antwort

1

ich? brauche mehr Kaffee ...

der definierte Typ ein Tupel ist eine Zeichenkette (auch bekannt als die Zeit) und ein Schwimmer (auch bekannt als der Wert) enthält, um hinzuzufügen ein, ich brauche:

dset[-1] = (datetime.now(timezone.utc).astimezone().isoformat(), value) 

Es ist eigentlich so einfach!

viele Einträge hinzufügen wird so gemacht:

l = [('stamp', x) for x in range(10)] 
size = list(dset.shape) 
tmp = size[0] 
size[0] += len(l) 
dset.resize(tuple(size)) 
for x in range(len(l)):             
    dset[tmp+x] = l[x] 

Trotzdem lässt sich diese etwas klobig fühlt und suboptimalen ...

Verwandte Themen