h5py: maneira correta de dividir conjuntos de dados da matriz

Estou um pouco confuso aqui:

Até onde eu entendi, o h5py's.value O método lê um conjunto de dados inteiro e o despeja em uma matriz, o que é lento e desanimado (e geralmente deve ser substituído por[()]. A maneira correta é usar fatias numpy-esque.

No entanto, estou obtendo resultados irritantes (com o 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)]

Eu acho que meu conjunto de dados é tão pequeno que.value não prejudica o desempenho significativamente, mas como a primeira opção pode ser tão lenta? Qual é a versão preferida aqui?

Obrigado!

ATUALIZAR Parece que eu não estava suficientemente claro, desculpe. Eu sei isso.value copia todo o conjunto de dados na memória enquanto o fatiamento recupera apenas a subparte apropriada. O que eu quero saber é por que cortar em arquivo éMais devagar do que copiar toda a matriz e depois fatiar na memória. Eu sempre pensei que o hdf5 / h5py fosse implementado especificamente, para que as subpartes de fatias fossem sempre as mais rápidas.

questionAnswers(3)

yourAnswerToTheQuestion