正如標(biāo)題所說,我發(fā)現(xiàn) Windows 和 Ubuntu 之間 numpy 數(shù)組的內(nèi)存使用量存在很大差異。這是復(fù)制此問題的簡(jiǎn)單代碼:import numpy as npimport jobliba = [1]*1000b = [a for i in range(1000)]np_arr = np.array(b)joblib.dump(np_arr, 'arr.h5')如果我在 Windows 10 機(jī)器上運(yùn)行此代碼,arr.h5則 的大小為3907KB。但是我在 Ubuntu 18.04 上運(yùn)行它,它是7812KB主要問題是我正在處理大型數(shù)據(jù)集,我的代碼在 16GB 的 Windows 機(jī)器上運(yùn)行良好,但我在 32GB 的 Ubuntu 上出現(xiàn)內(nèi)存錯(cuò)誤
1 回答

千巷貓影
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
是的,這是Windows和Linux之間的區(qū)別......
numpy 中的默認(rèn)整數(shù)np.int_
映射到 C long
,請(qǐng)參閱文檔。C 標(biāo)準(zhǔn)并沒有long
準(zhǔn)確指定 a 的大小,只是它至少為 32 位(4 字節(jié))。實(shí)際大小取決于編譯器和 cpu 架構(gòu)。在numpy bug tracker上已經(jīng)討論了這個(gè)問題。
通過顯式設(shè)置整數(shù)類型可以避免該問題:
np_arr = np.array(b, dtype=np.int32)
如果您知道數(shù)組將保存的最小值和最大值,則可以選擇較小的整數(shù)類型,例如 int16 或 uint8。
添加回答
舉報(bào)
0/150
提交
取消