2013-08-14 4 views
6

Ho un array:carico compressi dati (.npz) da file utilizzando numpy.load

>>> data = np.ones((1,3,128)) 

ho salvarlo in un file utilizzando savez_compressed:

>>> with open('afile','w') as f: 
     np.savez_compressed(f,data=data) 

Quando provo a caricarlo I non sembrano essere in grado di accedere ai dati:

>>> with open('afile','r') as f: 
     b=np.load(f) 
>>> b.files 
['data'] 
>>> b['data'] 

Traceback (most recent call last): 
    File "<pyshell#196>", line 1, in <module> 
    b['data'] 
    File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 238, in __getitem__ 
    bytes = self.zip.read(key) 
    File "C:\Python27\lib\zipfile.py", line 828, in read 
    return self.open(name, "r", pwd).read() 
    File "C:\Python27\lib\zipfile.py", line 853, in open 
    zef_file.seek(zinfo.header_offset, 0) 
ValueError: I/O operation on closed file 

Sto facendo qualcosa di sbagliato, ovviamente?

EDIT

seguito la risposta di @Saullo Castro Ho provato questo:

>>> np.savez_compressed('afile.npz',data=data) 
>>> b=np.load('afile.npz') 
>>> b.files 
['data'] 
>>> b['data'] 

e ottenuto il seguente errore:

Traceback (most recent call last): 
    File "<pyshell#253>", line 1, in <module> 
    b['data'] 
    File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 241, in __getitem__ 
    return format.read_array(value) 
    File "C:\Python27\lib\site-packages\numpy\lib\format.py", line 440, in read_array 
    shape, fortran_order, dtype = read_array_header_1_0(fp) 
    File "C:\Python27\lib\site-packages\numpy\lib\format.py", line 336, in read_array_header_1_0 
    d = safe_eval(header) 
    File "C:\Python27\lib\site-packages\numpy\lib\utils.py", line 1156, in safe_eval 
    ast = compiler.parse(source, mode="eval") 
    File "C:\Python27\lib\compiler\transformer.py", line 53, in parse 
    return Transformer().parseexpr(buf) 
    File "C:\Python27\lib\compiler\transformer.py", line 132, in parseexpr 
    return self.transform(parser.expr(text)) 
    File "C:\Python27\lib\compiler\transformer.py", line 124, in transform 
    return self.compile_node(tree) 
    File "C:\Python27\lib\compiler\transformer.py", line 159, in compile_node 
    return self.eval_input(node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 194, in eval_input 
    return Expression(self.com_node(nodelist[0])) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 578, in testlist 
    return self.com_binary(Tuple, nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 1082, in com_binary 
    return self.lookup_node(n)(n[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 596, in test 
    then = self.com_node(nodelist[0]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 610, in or_test 
    return self.com_binary(Or, nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 1082, in com_binary 
    return self.lookup_node(n)(n[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 615, in and_test 
    return self.com_binary(And, nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 1082, in com_binary 
    return self.lookup_node(n)(n[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 619, in not_test 
    result = self.com_node(nodelist[-1]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 626, in comparison 
    node = self.com_node(nodelist[0]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 659, in expr 
    return self.com_binary(Bitor, nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 1082, in com_binary 
    return self.lookup_node(n)(n[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 663, in xor_expr 
    return self.com_binary(Bitxor, nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 1082, in com_binary 
    return self.lookup_node(n)(n[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 667, in and_expr 
    return self.com_binary(Bitand, nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 1082, in com_binary 
    return self.lookup_node(n)(n[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 671, in shift_expr 
    node = self.com_node(nodelist[0]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 683, in arith_expr 
    node = self.com_node(nodelist[0]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 695, in term 
    node = self.com_node(nodelist[0]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 715, in factor 
    node = self.lookup_node(nodelist[-1])(nodelist[-1][1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 727, in power 
    node = self.com_node(nodelist[0]) 
    File "C:\Python27\lib\compiler\transformer.py", line 805, in com_node 
    return self._dispatch[node[0]](node[1:]) 
    File "C:\Python27\lib\compiler\transformer.py", line 739, in atom 
    return self._atom_dispatch[nodelist[0][0]](nodelist) 
    File "C:\Python27\lib\compiler\transformer.py", line 754, in atom_lbrace 
    return self.com_dictorsetmaker(nodelist[1]) 
    File "C:\Python27\lib\compiler\transformer.py", line 1214, in com_dictorsetmaker 
    assert nodelist[0] == symbol.dictorsetmaker 
AssertionError 

EDIT 2

L'errore precedente era in IDLE. Ha funzionato con Ipython.

risposta

8

Quando si utilizza numpy.load si can pass the file name, e se l'estensione è .npz, in primo luogo descompress:

np.savez_compressed('filename.npz', array1=array1, array2=array2) 
b = np.load('filename.npz') 

e fare b['array1'] e così via a recuperare i dati da ciascun array ...

+0

Grazie, ricevo un errore di asserzione quando provo questo però ... - traceback nella domanda modificata – atomh33ls

+0

Che tipo di dati hai in 'data', è questa una matrice di oggetti? –

+0

Galleggianti. Ho usato 'data = np.ones ((1,3,128))' in questo caso. – atomh33ls

0

Provare ad aprire il file come binario:

with open('afile','rb') as f: 
+0

Grazie, ho ancora lo stesso errore però .. – atomh33ls

+0

Provare a rientrare tutte le righe seguenti all'apertura! Il tuo file si chiude quando lascia il blocco 'with'. –

+0

Grazie, era un errore di battitura nella domanda - risolto. Ho ancora lo stesso errore. – atomh33ls

0

Ho lo stesso problema (AssertionError) quando usi ng numpy 1.7.1/1.8.0 con python 2.7.6 sia su MAC OS che Windows. Ma il problema è stato risolto automaticamente dopo il passaggio a Linux con python 2.7.5. Poi ho reinstallato python 2.7.5 su MACOS e Windows e tutto il problema era scomparso. Fondamentalmente il problema è con python invece di numpy mentre il compilatore invia alert.So probabilmente la versione conta.

Ma sebbene npy sia il tipo serializzabile di numpy, non penso che il file sia abbastanza piccolo anche con savez_compressed per la matrice grande.

Speriamo che il problema è lo stesso con il mio

1

You can also use the f attribute, which leaves you with a np.ndarray :

images = np.load('images.npz') 
images = images.f.arr_0 

Il nome/chiave della matrice all'interno del .npz file (ad esempio arr_0) possono essere trovati attraverso

images.keys() 

Nota: l'attributo f non è documentato nella docstring del caricamento. Quando load legge un file npz, restituisce un'istanza di class NpzFile. Questa classe è disponibile come numpy.lib.npyio.NpzFile. La docstring della classe NpzFile descrive l'attributo f. (Al momento della stesura del presente documento, il codice sorgente della classe può essere trovato here.