2015-03-23 9 views
8

Bir diziyi bir belleğe yüklemek için çok büyük olan bir hdf5 dosyasına depolamanın bir yolu var mı? BuBir diziyi, belleğe yüklenemeyecek kadar büyük olan hdf5 dosyasında nasıl depolanır?

f = h5py.File('test.hdf5','w') 
f['mydata'] = np.zeros(2**32) 

gibi bir şey yaparsanız

Bir hatıra hatası alıyorum.

+3

(http://docs.h5py.org/en/latest/high/dataset.html#chunked-storage) [hyperslabs] bir göz atın. Bu mümkündür, ancak 'parçalara' yazmalı ve hdf5 dosyasını parçalara ayırmalısınız. – Mathias711

+3

http://docs.h5py.org/en/latest/high/dataset.html#chunked-storage –

cevap

6

documentation'a göre, hdf5'te saklanan yığınlanmış bir dizi oluşturmak için create_dataset'u kullanabilirsiniz. Örnek:

>>> import h5py 
>>> f = h5py.File('test.h5', 'w') 
>>> arr = f.create_dataset('mydata', (2**32,), chunks=True) 
>>> arr 
<HDF5 dataset "mydata": shape (4294967296,), type "<f4"> 

HDF5 dataset döner Numpy-diziler dilimleme.

>>> arr[:10] 
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32) 
>>> type(arr[:10]) 
numpy.array 

Numpy dizisi için değerleri ayarlayabilirsiniz.

>>> arr[3:5] = 3 
>>> arr[:6] 
array([ 0., 0., 0., 3., 3., 0.], dtype=float32) 

bu en etkili yolu ise bilmiyorum ama parçalar halinde tüm dizi adımlayabilirsiniz. Ve örneğin rasgele değerlere ayarlayarak:

>>> import numpy as np 
>>> for i in range(0, arr.size, arr.chunks[0]): 
     arr[i: i+arr.chunks[0]] = np.random.randn(arr.chunks[0]) 
>>> arr[:5] 
array([ 0.62833798, 0.03631227, 2.00691652, -0.16631022, 0.07727782], dtype=float32) 
+0

Veri seti boyutu önceden bilinmese ne olur? Ek modda yapılabilir mi? – mrgloom

+0

@mrgloom Belki bu sizin ihtiyaçlarınıza uygundur? https://stackoverflow.com/a/25656175/3635816 – RickardSjogren

İlgili konular