2017-03-17 64 views
1

一個numpy的陣列我已經保存了一些使用下面的代碼numpy的對象:如何恢復從npy.gz文件

f = gzip.GzipFile('/some/path/file.npy.gz', "w") 
np.save(file=f, arr=np.rint(trimmed).astype('int16')) 
f.close() 

現在我有一堆npy.gz文件,但我可以不知道如何以編程方式將它們返回到Python。 np.fromtextnp.fromstring似乎不起作用,無論如何不會保留形狀信息。

我已經試過:

gzipfile = gzip.GzipFile('/some/path/file.npy.gz', 'rb') 
text = gzipfile.read() 

而且text看起來是這樣的:

b'\x93NUMPY\x01\x00F\x00{\'descr\': \'<i2\', \'fortran_order\': False, \'shape\': (132, 248, 291), } \n0\xf80\xf80...' 

但怎樣旁邊我得到那個字符串返回到numpy的對象?

+0

沒有嘗試[np.loadtxt()](https://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html),根據它解壓縮的文件。 – umutto

+0

是的,我也嘗試過。給了錯誤:ValueError異常:無法將字符串轉換爲float:B「\ x93NUMPY \ X01 \ x00F \ X00 {‘DESCR’:」 – jstaker7

回答

2

如果它工作到savegzip文件,它也可能從一個文件讀取。 load是對口save

In [193]: import gzip 
In [194]: f = gzip.GzipFile('file.npy.gz', "w") 
In [195]: np.save(f, np.arange(100)) 
In [196]: f.close() 

In [200]: f = gzip.GzipFile('file.npy.gz', "r") 
In [201]: np.load(f) 
Out[201]: 
array([ 0, 1, 2, 3, 4, .... 98, 99]) 

還有一個savez(compressed),節省了多個陣列爲zip存檔。

0

你已經通過自己的方式在某種程度上這樣做,但你可以使用numpy的功能,而不是保存和加載對象,而不是使用其他功能。

您可以通過使用save()其中array_obj是你的陣列,它要保存保存所需的陣列。

array_file = open('array.npy', 'wb') 
numpy.save(array_file, array_obj) 

然後,可以檢索所希望的陣列如下。

array_file = open('array.npy', 'rb') 
array_obj = numpy.load(array_file) 

相應地使用,希望它有幫助!

+0

我知道這一點,但壓縮輸出我的文件需要。無論如何,我的文件需要5天的時間才能計算出來並且已經保存了,所以我主要擔心使用這些文件,特別是使用不同的保存方案。 – jstaker7

+0

@ jstaker7我想你可以看看這個[直接從numpy的陣列,而不需要中間文件創建一個zip文件(http://stackoverflow.com/questions/27681108/create-a-zipfile-directly-from-numpy-數組無中介文件)。它可能有幫助! – abhinav