2014-04-22 10 views
5

Khi bạn tạo một h5py dataset, làm cách nào để thêm hoặc xóa các hàng hoặc cột cụ thể khỏi mảng NxM?Thêm hoặc sửa đổi các hàng hoặc cột cụ thể trong bộ dữ liệu h5py

Câu hỏi của tôi tương tự như this one, nhưng tôi không muốn cắt ngắn hoặc mở rộng một cách mù quáng. Khi xóa, tôi cần có thể chỉ định hàng hoặc cột chính xác cần xóa. Để thêm, tôi biết tôi phải chỉ định maxshape=(None, None) khi tạo tập dữ liệu ban đầu, nhưng phương pháp resize dường như không cho phép bạn chỉ định hàng hoặc cột nào bị cắt bớt nếu bạn thu nhỏ kích thước.

Trả lời

5

h5py không thực sự được thiết kế để thực hiện việc này. Pandas có thể là một thư viện tốt hơn để sử dụng, vì nó được xây dựng xung quanh khái niệm về các bảng.

Có nói rằng, đây là cách để làm điều đó:

In [1]: f = h5py.File('test.h5') 

In [2]: arr = rand(4,4) 

In [3]: dset = f.create_dataset('foo',data=arr,maxshape=(2000,2000)) 

In [4]: dset[:] 
Out[4]: 
array([[ 0.29732874, 0.59310285, 0.61116263, 0.79950116], 
     [ 0.4194363 , 0.4691813 , 0.95648712, 0.56120731], 
     [ 0.76868585, 0.07556214, 0.39854704, 0.73415885], 
     [ 0.0919063 , 0.0420656 , 0.35082375, 0.62565894]]) 

In [5]: dset[1:-1,:] = dset[2:,:] 

In [6]: dset.resize((3,4)) 

In [7]: dset[:] 
Out[7]: 
array([[ 0.29732874, 0.59310285, 0.61116263, 0.79950116], 
     [ 0.76868585, 0.07556214, 0.39854704, 0.73415885], 
     [ 0.0919063 , 0.0420656 , 0.35082375, 0.62565894]]) 

này loại bỏ cột 1 từ dset. Nó làm như vậy bằng cách gán các cột 2 và 3 đến 1 và 2, tương ứng, trước khi thu hẹp tập dữ liệu theo một cột. Trao đổi các subscript để loại bỏ hàng 1. Bạn có thể dễ dàng viết một wrapper xung quanh này nếu bạn đang đi để được làm điều đó rất nhiều.

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