2012-06-27 28 views
5

Giả sử chương trình của tôi tạo ra một mảng lớn dữ liệu mà sau đó tôi lưu với thói quen savez của numpy. Tuy nhiên, tôi cũng muốn lưu trữ một số thông tin bổ sung cùng với mảng đó. Ví dụ sẽ là git commit id của phiên bản hiện tại và các tham số đầu vào được sử dụng để tạo dữ liệu để sau này tôi có thể xem dữ liệu và biết chính xác cách tôi tạo nó.Tôi có thể chú thích một mảng có nhiều mảng khi lưu nó với savez

Có cách nào để lưu thông tin này trực tiếp cùng với mảng trong tệp npz hoặc tôi có phải tạo tệp riêng không?

Trả lời

4

Bạn sẽ có thể:

In [2]: a = np.arange(10) 

In [3]: b = 'git push' 

In [5]: np.savez('file',a=a,b=b) 

In [7]: data = np.load('file.npz') 

In [8]: data.keys() 
Out[8]: ['a', 'b'] 

In [9]: data['a'] 
Out[9]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

In [10]: str(data['b']) 
Out[10]: 'git push' 

Vì vậy, bạn có thể lưu dữ liệu có tên tùy ý và có được một đối tượng từ điển giống như ra. Có lẽ một định dạng tốt hơn để sử dụng mà bạn có thể linh hoạt hơn và đã xây dựng trong hỗ trợ cho tất cả các loại siêu dữ liệu là hdf5 sử dụng một trong hai h5py hoặc pytables:

http://h5py.alfven.org/docs/

http://www.pytables.org/

+0

Ah, bạn thêm gợi ý HDF cũng giống như tôi đã kết thúc lên câu trả lời của tôi! Tôi sẽ để lại của tôi quá, cũng giống như nó có một ví dụ về cách sử dụng 'h5py'. Câu trả lời hay, mặc dù. –

+0

Tôi thấy cả câu trả lời của bạn và Joe Kington đều rất hữu ích. Tôi không thể quyết định cái nào để chấp nhận vì vậy tôi đã lấy của bạn bởi vì bạn lần đầu tiên :) – Lagerbaer

7

Tóm lại, bạn có thể (.npz chỉ là một dict ngâm) nhưng bạn có lẽ tốt hơn off chuyển sang cái gì khác. (Có vẻ như @JoshAdel vừa đăng một ví dụ hay về việc làm điều này nếu bạn muốn gắn bó với .npz.)

HDF là một lựa chọn tốt hơn cho những thứ như thế này.

Mỗi nhóm hoặc tập dữ liệu trong tệp hdf có thể lưu trữ thuộc tính.

Tôi muốn giới thiệu h5py để lưu trữ mảng cố định trong tệp hdf.

Như một ví dụ:

import numpy as np 
import h5py 

somearray = np.random.random(100) 

f = h5py.File('test.hdf', 'w') 

dataset = f.create_dataset('my_data', data=somearray) 

# Store attributes about your dataset using dictionary-like access 
dataset.attrs['git id'] = 'yay this is a string' 

f.close() 
+0

+1 Tôi sử dụng rất nhiều trong nghiên cứu của mình. Tôi có ít kinh nghiệm hơn với pytables, mặc dù tôi biết rất nhiều người sử dụng nó. – JoshAdel

+0

Điều này rất hữu ích JoshAdel. Có bất kỳ giới hạn nào về kích thước của các thuộc tính này không? –

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