2017-01-31 2 views
1

Wird aus einem Datensatz ohne Laden die ganze Sache auf einmal in dem Speicher [das Ganze nicht in dem Speicher passen] und erhält die Größe folgende lesen des Datensatzes, ohne die Daten mit h5py in Python zu laden? wenn nicht, wie?aus einer großen Datei lesen, ohne ganze Sache in dem Speicher geladen mit h5py

h5 = h5py.File('myfile.h5', 'r') 
mydata = h5.get('matirx') # are all data loaded into memory by using h5.get? 
part_of_mydata= mydata[1000:11000,:] 
size_data = mydata.shape 

Danke.

Antwort

2

get (oder Indizierung) ruft einen Verweis auf das Dataset für die Datei ab, lädt jedoch keine Daten.

In [789]: list(f.keys()) 
Out[789]: ['dset', 'dset1', 'vset'] 
In [790]: d=f['dset1'] 
In [791]: d 
Out[791]: <HDF5 dataset "dset1": shape (2, 3, 10), type "<f8"> 
In [792]: d.shape   # shape of dataset 
Out[792]: (2, 3, 10) 
In [793]: arr=d[:,:,:5] # indexing the set fetches part of the data 
In [794]: arr.shape 
Out[794]: (2, 3, 5) 
In [795]: type(d) 
Out[795]: h5py._hl.dataset.Dataset 
In [796]: type(arr) 
Out[796]: numpy.ndarray 

d Der Datensatz wird Array wie, aber nicht tatsächlich ein numpy Array.

Fetch den gesamten Datensatz mit:

In [798]: arr = d[:] 
In [799]: type(arr) 
Out[799]: numpy.ndarray 

Genau wie der Datei yourslice hängt von dem Slicing, Datenlayout Chunking und anderen Dinge zu lesen, es hat zu holen, die nicht unter Ihrer Kontrolle sind im Allgemeinen und sollte dich nicht beunruhigen.

Beachten Sie auch, dass ich beim Lesen eines Datensatzes die anderen nicht lade. Gleiches würde für Gruppen gelten.

http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data

Verwandte Themen