2012-06-27 8 views
5

Załóżmy, że mój program tworzy dużą ilość danych, które następnie zapisuję w procedurze savez numpy. Jednak chciałbym również przechowywać pewne dodatkowe informacje wraz z tą tablicą. Przykładem może być identyfikator zatwierdzenia git bieżącej wersji oraz parametry wejściowe używane do generowania danych, aby później móc przeglądać dane i dokładnie wiedzieć, jak je utworzyłem.Czy mogę adnotować tablicę numpy podczas zapisywania go przy pomocy savez

Czy istnieje sposób na zapisanie tych informacji bezpośrednio wraz z tablicą w pliku npz, czy też musiałbym utworzyć oddzielny plik?

Odpowiedz

4

powinien być w stanie:

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' 

Więc można zapisać dowolne dane o nazwach i uzyskać obiekt słownikowy jak na zewnątrz. Może lepiej Format w obsłudze, że może być bardziej elastyczny i ma wbudowane wsparcie dla wszystkich rodzajów metadanych jest hdf5 przy użyciu h5py lub pytables:

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

http://www.pytables.org/

+0

Ach, dodano sugestię HDF tak jak ja kończyłam moją odpowiedź! Opuszczę też moje, tak jak ma to przykład użycia 'h5py'. Dobra odpowiedź. –

+0

Znalazłem odpowiedź zarówno twoją, jak i Joe Kingtona, bardzo pomocną. Nie mogłem zdecydować, który z nich zaakceptować, więc wziąłem twoje, ponieważ byłeś pierwszy :) – Lagerbaer

7

W skrócie, można (.npz to tylko marynowany dyktat), ale prawdopodobnie lepiej będzie przejść na coś innego. (Wygląda na to, że @JoshAdel właśnie zamieścił dobry przykład wykonania tego, jeśli chcesz pozostać przy .npz.)

HDF to o wiele lepszy wybór dla czegoś takiego.

Każda grupa lub zestaw danych w pliku hdf może przechowywać atrybuty.

Polecam h5py do przechowywania numpy tablic w pliku hdf.

Jako przykład:

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 Używam h5py w moich badaniach. Mam znacznie mniejsze doświadczenie z pytables, chociaż znam wielu ludzi, którzy go używają. – JoshAdel

+0

Jest to bardzo pomocne JoshAdel. Czy są jakieś ograniczenia dotyczące rozmiaru tych atrybutów? –

Powiązane problemy