我目前正在運行一個實驗,其中我在空間上掃描目標並在每個離散像素處抓取示波器跡線。通常我的走線長度是200Kpts。在掃描整個目標後,我將這些時域信號在空間上組裝起來,並基本播放所掃描的電影。我的掃描區域大小爲330x220像素,因此整個數據集大於我必須使用的計算機上的RAM。爲讀/寫速度優化HDF5數據集
首先,我只是將每個示波器軌跡保存爲一個numpy數組,然後在我的掃描完成了下采樣/濾波等後,再以一種不會遇到內存問題的方式拼接電影。但是,現在我正處於一個不能縮減採樣的點,因爲會發生混疊,因此需要訪問原始數據。
我已經開始考慮使用H5py將我的大型3D數據塊存儲在HDF5數據集中。我的主要問題是我的塊大小分配。我輸入的數據是正交的,我想在讀出來的面我寫我的數據的主要選項(據我所知)是:
#Fast write Slow read
with h5py.File("test_h5py.hdf5","a") as f:
dset = f.create_dataset("uncompchunk",(height,width,dataLen),chunks = (1,1,dataLen), dtype = 'f')
for i in range(height):
for j in range(width):
dset[i,j,:] = np.random.random(200000)
或
#Slow write Fast read
with h5py.File("test_h5py.hdf5","a") as f:
dset = f.create_dataset("uncompchunk",(height,width,dataLen),chunks = (height,width,1), dtype = 'f')
for i in range(height):
for j in range(width):
dset[i,j,:] = np.random.random(200000)
有我可以通過某種方式來優化這兩種情況,這樣既不會非常低效,也無法運行。
如果您知道數據集的提前大小,並且不希望使用壓縮,你可以使用連續存儲(即沒有塊)。你不能嘗試嗎? – titusjan