3

我試圖在兩個巨大的矩陣(10 * 25,000,000)之間產生通常的矩陣乘法。 當我這樣做時,我的記憶力會耗盡。我怎麼能使用numpy的memmap來處理這個問題? 這是一個好主意嗎?我並不擔心手術的速度,我只是想要結果,即使這意味着等待一段時間。先進的謝謝!Python numpy memmap矩陣乘法

8 gbs ram,I7-2617M 1.5 1.5 ghz,Windows7 64位。即時通訊使用64位版本的一切:python(2.7),numpy,scipy。

編輯1:

也許h5py是一個更好的選擇?

+0

你說的是「通常的矩陣乘法」,而不是元素方面的乘法我想。 元素的類型是什麼? int8? float64? 由此產生的矩陣應該是25,000,000 * 25,000,000或10 * 10? 如果10 * 10,你應該沒問題。 10 * 25,000,000 * 8bytes = 2GBytes。 –

+0

(10; 25,000,000)*(25,000,000; 10)有什麼想法?這些軟件包是否有助於解決這個問題,或者我是否在錯誤的方向推理。 float64。我可能可以使用float32,但它仍然無法工作。 @FélixCantournet – JEquihua

回答

2

您可能會嘗試使用np.memmap,並一次計算一個元素的10x10輸出矩陣。

所以你只需加載第一個矩陣的第一行和第二個第一列,然後np.sum(row1 * col1)

1

嘗試numpy.memmap和numexpr!這可以在沒有內存xD的情況下使用你的磁盤和CPU chache。它很像Fortran循環。這裏的一些代碼:python - way to do fast matrix multiplication and reduction while working in memmaps and CPU。但要小心它將創建的文件的大小 - 如果它們只是臨時文件,稍後將其刪除,如果不是,那麼我認爲最好將它們與壓縮9x的pandas.hdf5文件結合使用。所以你創建data.tofile,用memmap加載它,計算,將memmap保存到pandas.hd5f,刪除memmap。將數據存儲在一行中也是hdf5文件的一些選項,應該佔用較少的空間 - 我想我會在某個地方閱讀它。另外,當你使用numpy memmap 1row數據時,只需按照正確的順序給出一些形狀,並且numpy memmap將讀取選定形狀的1row數據。

+0

numexpr僅適用於元素 – RKI