Load compressed data (.npz) from a file using numpy.load

I have an array:

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

I save it in a file using savez_compressed :

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

When I try to download it, I seem to be unable to access the data:

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

Am I doing something obviously wrong?

EDIT

Following the @Saullo Castro answer, I tried this:

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

and got the following error:

 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

The above error was in IDLE. It worked with Ipython.

+6
source share
4 answers

When using numpy.load you can pass the file name , and if the extension is .npz , it will be descompress first:

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

and do b['array1'] , etc., to retrieve data from each array ...

+8
source

You can also use the f attribute, which will leave you with np.ndarray :

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

The name / key of the array inside the .npz file (for example, arr_0 ) can be found through

 images.keys() 

Note. The f attribute is not documented in the load docstring. When the download reads the npz file, it returns an instance of the class NpzFile . This class is available as numpy.lib.npyio.NpzFile . The docstring of the NpzFile class describes the f attribute. (Starting with this entry, the source code for this class can be found here .

+1
source

Try opening the file as binary:

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

I have the same problem (AssertionError) when using numpy 1.7.1 / 1.8.0 with python 2.7.6 on both MAC OS and Windows. But the problem was automatically fixed after switching to Linux using python 2.7.5. Then I reinstall python 2.7.5 on MACOS and Windows, and the whole problem went away. Mostly the problem is python instead of numpy, as the compiler sends alert.So, maybe the version matters.

But although npy is a numpy serializable type, I don't think the file is small enough even with savez_compressed for a large matrix.

I hope your problem will be the same as mine.

0
source

Source: https://habr.com/ru/post/951714/


All Articles