h5py: Richtige Methode zum Aufteilen von Array-Datasets

Ich bin hier etwas verwirrt:

Soweit ich verstanden habe, ist h5py's.value Methode liest ein gesamtes Dataset und speichert es in einem Array, das langsam und entmutigend ist (und im Allgemeinen durch ersetzt werden sollte)[()]. Der richtige Weg ist die Verwendung von numpy-esque Slicing.

Ich bekomme jedoch irritierende Ergebnisse (mit h5py 2.2.1):

import h5py
import numpy as np
>>> file = h5py.File("test.hdf5",'w')
# Just fill a test file with a numpy array test dataset
>>> file["test"] = np.arange(0,300000)

# This is TERRIBLY slow?!
>>> file["test"][range(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This is fast
>>> file["test"].value[range(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This is also fast
>>> file["test"].value[np.arange(0,300000)]
array([     0,      1,      2, ..., 299997, 299998, 299999])
# This crashes
>>> file["test"][np.arange(0,300000)]

Ich vermute, dass mein Datensatz so klein ist, dass.value beeinträchtigt die Leistung nicht wesentlich, aber wie kann die erste Option so langsam sein? Was ist die bevorzugte Version hier?

Vielen Dank!

AKTUALISIEREN Es scheint, dass ich nicht klar genug war, sorry. Ich weiß das.value kopiert den gesamten Datensatz in den Speicher, während beim Schneiden nur das entsprechende Unterteil abgerufen wird. Was ich mich frage, ist, warum das Aufteilen in Dateien so istLangsamer als das gesamte Array zu kopieren und dann im Speicher zu schneiden. Ich dachte immer, dass hdf5 / h5py speziell implementiert wurde, damit das Schneiden von Unterteilen immer am schnellsten ist.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage