2016-03-30 21 views
0

2B bölümleme şeklinde doldurup bir 78TB HDF5 veri kümesi oluşturmaya çalışıyorum. Yazdığım blok, hiç yazılmamış satırlar olduğu zaman bu çok yavaştır, çünkü HDF5 diskin içine girip ayrılmış ve eksik girişleri sıfır ile doldurmaktadır.h5py kullanarak ilk 5 ile hdf5 veri kümesinin nasıl oluşturulacağını ve h5py kullanarak doldurma

Bunun yerine, h5py'nin oluşturulduğu anda veri kümem için disk alanını ayırmasını ve asla doldurmamasını istiyorum. Bu, the HDF5 Dataset documentation'da Tablo 16'ya göre C api ile mümkündür, ancak bunu h5py ile, tercihen yüksek seviyeli arayüzle nasıl yapabilirim?

cevap

0

. Daha sonra üst düzey bir Veri Kümesi nesnesine geri dönüştürmek FILL_TIME_NEVER özelliğiyle veri kümesi oluşturmak için düşük seviyeli H5py API kullanabilirsiniz:

# create the rows dataset using the low-level api so I can force it to not do zero-filling, then convert to a high level object 
spaceid = h5py.h5s.create_simple((numRows, numCols)) 
plist = h5py.h5p.create(h5py.h5p.DATASET_CREATE) 
plist.set_fill_time(h5py.h5d.FILL_TIME_NEVER) 
plist.set_chunk((rowchunk, colchunk)) 
datasetid = h5py.h5d.create(fout.id, "rows", h5py.h5t.NATIVE_DOUBLE, spaceid, plist) 
rows = h5py.Dataset(datasetid) 
0

Yazma düzeninizle eşleşen bir yığın şekli belirtmeyi deneyin. Eğer 1024x1024 bloklar halinde yazıyoruz Örneğin, bu gibi görünecektir:

import h5py 
import numpy as np 
f = h5py.File('mybigdset.h5', 'w') 
dset = f.create_dataset('dset', (78*1024*1024, 1024*1024), dtype='f4', chunks=(1024,1024)) 
arr = np.random.rand(1024,1024) 
dset[0:1024, 0:1024] = arr 
f.close() 

Neyse ki, bu diskin 78TB kullanmıyordu, dosya boyutu sadece 4MB oldu.

+0

Ben Dosyanın oluşturulduğu çizgiyi unuttum bu hemen önce olurdu create_dataset çağrısı: f = h5py.File ('mybigdset.h5', 'w') –

+0

tamam - bunu ekledi. Öneri için –

+0

teşekkürler. Erişimin satır bloklarında yer alacağı bir uygulamada kullanmak için bu dosyayı üretiyorum, bu yüzden yığınlamayı kullanmak istemiyorum. – AatG

0

Doldurma zamanını H5Pset_fill_time() rutini ile "asla" olarak ayarlamak istediğinize inanıyorum, ancak bunu yapmanın h5py yolunu bilmiyorum. Quincey'in önerdiği gibi

İlgili konular