2016-07-18 65 views
1

我一直在努力輸出npy文件的內容,當print(np.load('/home/ugwz/fcn/vgg16.npy', encoding='latin1')),輸出的一部分如下所示,這是難以閱讀。關於加載npy文件和調查裏面的內容

enter image description here

然後我試着輸出這個數組的元數據

print(np.load('/home/vgg16.npy', encoding='latin1').size) 
print(np.load('/home/vgg16.npy', encoding='latin1').shape) 
print(np.load('/home/vgg16.npy', encoding='latin1').ndim) 

輸出如下:

1 
() 
0 

什麼是閱讀和理解npy文件的最好方法?

的附加信息如下:

print(np.load('/home/vgg16.npy',encoding='latin1').dtype) 

object 

print(np.load('/home/vgg16.npy',encoding='latin1').item().type) 

AttributeError: 'dict' object has no attribute 'type' 


print(np.load('/home/vgg16.npy',encoding='latin1').item().shape) 

AttributeError: 'dict' object has no attribute 'shape' 
+0

你是如何創建數組的?我的猜測是你用numpy數組的字典作爲第二個參數調用'np.save'。 –

+0

是的,看起來像加載的npy文件是一個字典對象 – user785099

回答

2

基於屏幕的結束拍攝

....], dtype=float)]} 

我期望的起始位置爲{akey: [array(....。換句話說,一個字典(一個或多個項目),一個列表(至少一個項目)和1d數組。

雖然你的尺寸,形狀,ndim值表明這是一個單一的項目,0維數組。它是什麼dtype。我在猜測dtype=object

它看起來像是嵌入在列表和/或字典和/或對象dtype數組中的1d數組。

我還沒有使用過encoding參數。它的文檔是:

編碼:STR,可選

閱讀Python 2串時使用何種編碼。僅當 加載Python 2在Python 3上生成pickle文件時纔有用,其中包括 包含對象數組的npy/npz文件。不允許'latin1',' 'ASCII'和'字節'以外的值,因爲它們可能損壞數字 數據。默認:'ASCII'

這與包含pickle對象的這個文件一致。 pickling是用於保存列表,字典等的一般Python工具。np.save/load可以處理pickled對象,但將numpy數組保存爲其特殊格式,實際上是一個數組pickle。

我不知道這個文件是否可以加載pickle(加載?),如果這是更清晰的?

我想試試這個加載與allow_pickle=False只是爲了驗證它是否試圖處理酸漬對象,包括dtype=object陣列。

另一個嘗試是那些語句應該從0D陣列提取單個元件的

data = load... 
print(data.dtype) # object? 
d1 = data[()]  # or 
d1 = data.item() 

要麼。然後嘗試識別d1(類型,形狀,dtype等)。

+0

嗨hpaulj,我已經更新了原始文章,包括data.item()。形狀等信息的輸出,看起來像它不支持這些類型的信息。從https://dl.dropboxusercontent.com/u/50333326/vgg16.npy – user785099

+0

下載npy文件由於它是字典對象,我使用密鑰來提取密鑰列表。 – user785099

+0

所以這是一個包含字典的對象數組。 – hpaulj