2013-04-25 36 views
13

Có ai có ý tưởng cập nhật bộ dữ liệu hdf5 từ h5py không? Giả sử chúng ta tạo ra một tập dữ liệu như:Cập nhật bộ dữ liệu h5py

import h5py 
import numpy 
f = h5py.File('myfile.hdf5') 
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4")) 
new_dset_value=numpy.zeros((3,3),"=i4") 

Có thể mở rộng dset đến một mảng 3x3 NumPy?

Trả lời

14

Bạn cần tạo tập dữ liệu với thuộc tính "có thể mở rộng". Không thể thay đổi điều này sau khi tạo tập dữ liệu ban đầu. Để làm điều này, you need to use the "maxshape" keyword. Giá trị None trong bộ sưu tập maxshape có nghĩa là thứ nguyên đó có thể có kích thước không giới hạn. Vì vậy, nếu f là một tập tin HDF5:

dset = f.create_dataset('mydataset', (2,2), maxshape=(None,3)) 

tạo ra một tập dữ liệu có kích thước (2,2), mà có thể kéo dài vô thời hạn dọc theo chiều đầu tiên và 3 cùng thứ hai. Bây giờ, bạn có thể mở rộng bộ dữ liệu với resize:

dset.resize((3,3)) 
dset[:,:] = np.zeros((3,3),"=i4") 

Kích thước đầu tiên có thể tăng lên nhiều như bạn thích:

dset.resize((10,3)) 
+5

thay đổi kích thước cũng chấp nhận một cuộc tranh cãi trục, do đó bạn chỉ cần xác định kích thước mới đối với trục bạn đang mở rộng, thay vì tất cả chúng: dset.resize (10, axis = 0) – velotron

+0

Đó là @velotron rất hữu ích, nó có thể được thêm vào câu trả lời được chấp nhận bởi vì đối với mảng đa chiều, nó dễ dàng hơn để làm như vậy. – gcucurull

+0

ví dụ này có ghi đè lên những gì đã có trong tệp không? hay nó chỉ thêm các nội dung mới? – user798719

Các vấn đề liên quan