我有一個3D數組,只包含0,1和2的值,並且希望分別將這些值轉換爲0,128和255。我看了看周圍,這個線程(Translate every element in numpy array according to key)似乎是要走的路。Numpy:翻譯元素增加了很多文件大小(因子8)
所以我試着實現它,它的工作,代碼的相關部分可以看到下面(我讀寫數據和H5文件,但我懷疑這很重要,我只是提到它的情況下)
#fetch dataset from disk
f = h5py.File('input/A.h5','r') #size = 572kB
#read and transform array
array = f['data'].value #type = numpy.ndarray
my_dict = {1:128, 2:255, 0:0}
array=np.vectorize(my_dict.get)(array)
#write translated dataset to disk
h5 = h5py.File('output/B.h5', driver=None) #final size = 4.5MB
h5.create_dataset('data', data=array)
h5.close()
問題是,輸入文件(A.h5)的大小是572kB,輸出文件(B.h5)是8倍大(4.5MB)。
這是怎麼回事?我有另一個相同的數組,從0到255的值都是相同的,它的大小也是572kB,所以數字越大越好。我的第一個猜測是,也許python創建對象,而不是整數,我試圖鑄造爲int,但大小保持不變。
側面說明:如果我轉換數據與3縮進for循環,然後大小保持572KB(但代碼是慢得多)
我懷疑在喜歡的問題中的另一個答案是更快,http://stackoverflow.com/a/29055933/901925。即使這樣你也會想看結果dtype。您也可以在create_dataset語句中指定dtype。 – hpaulj