2013-08-14 15 views
6

Mam tablicę:obciążenia skompresowane dane (.npz) z pliku przy użyciu numpy.load

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

zapisać go do pliku przy użyciu savez_compressed:

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

Kiedy próbuję załadować mi nie wydają się być w stanie uzyskać dostęp do danych:

>>> 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 

Czy robię coś oczywiście nie tak?

EDIT

następującą odpowiedź @Saullo Castro Próbowałem to:

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

i uzyskałem następujący błąd:

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

Powyższy błąd był w IDLE. Pracował przy użyciu Ipython.

Odpowiedz

8

Podczas korzystania numpy.load Ci can pass the file name, a jeśli rozszerzenie jest .npz, to najpierw descompress:

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

i zrobić b['array1'] i tak dalej do odzyskać dane z każdej tablicy ...

+0

Dzięki, dostaję błąd potwierdzenia, gdy próbuję tego chociaż ..- traceback w edytowanym pytaniu – atomh33ls

+0

Jakie dane masz w "danych", czy jest to tablica obiektów? –

+0

Pływaki. W tym przypadku użyłem 'data = np.ones ((1,3,128)). – atomh33ls

0

Spróbuj otworzyć ten plik jako binarny:

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

Dzięki, nadal otrzymuję ten sam błąd .. – atomh33ls

+0

Spróbuj wgrać wszystkie linie po otwarciu! Twój plik zostanie zamknięty po opuszczeniu bloku 'with'. –

+0

Dzięki, to był literówka w pytaniu - naprawiono. Wciąż dostaję ten sam błąd. – atomh33ls

0

Mam ten sam problem (AssertionError), gdy usi ng numpy 1.7.1/1.8.0 z pythonem 2.7.6 zarówno na MAC OS jak i Windows. Ale problem został automatycznie naprawiony po tym, jak przełączyłem się na Linuksa z pythonem 2.7.5. Następnie przeinstalowałem Pythona 2.7.5 na MACOS i Windows i cały problem zniknął. Zasadniczo problem jest z python zamiast numpy, jak kompilator wysyła alert. Tak więc ta wersja ma znaczenie.

Ale chociaż npy jest serializowalnym typem numpy, nie sądzę, że plik jest wystarczająco mały, nawet z savez_compressed dla dużej macierzy.

Mam nadzieję, że twój problem jest taki sam z kopalni

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 

Nazwa/klucz tablicy wewnątrz .npz akt (np arr_0) można znaleźć poprzez

images.keys() 

Uwaga: Atrybut f nie jest udokumentowany w docstring ładunku. Kiedy ładunek odczyta plik npz, zwraca instancję z class NpzFile. Ta klasa jest dostępna pod numerem numpy.lib.npyio.NpzFile. Docstring klasy NpzFile opisuje atrybut f. (Od tego momentu można znaleźć kod źródłowy klasy here.

Powiązane problemy