您正在創建的數據大小將取決於矩陣大小和數據的精度類型。
您正在嘗試使用np.random.normal
創建一個具有float64精度類型值的矩陣。 64位數字表示每個數字使用64位,因此每個數字需要8個字節(每字節8位)的內存。如果您的矩陣的形狀/尺寸爲4000x794832
,那意味着您需要〜23.7GB [4000 * 794832 * 8]的內存分配。
如果你有一個16GB的RAM,它應該是不夠的,因爲它會使用SWAP(如果定義的足夠多),可能需要一些時間來創建它,或者只是內存不足。
問題是,你需要一個float64精度?因爲它似乎對通常的科學家發展很重要。因此,爲了加速以下任何數學運算,您可以考慮將矩陣精度類型更改爲float16,例如[4000 * 794832 * 2]。
import numpy as np
a = np.random.normal(0, 0.7**2, size=(4000,794832))
a.nbytes # will give a size of 25434624000 [~23.7GB] (huge number)
b = np.random.normal(0, 0.7**2, size=(4000,794832)).astype(np.float16)
b.nbytes # will give a size of 6358656000 [~5.9GB](big but at least you can do everything on RAM)
在這種情況下的問題是np.random.normal
還沒有得到選項定義直接numpy的dtype
,所以您將創建一個float64矩陣,然後將其轉換,這並不是一個非常有效的選擇。但如果沒有其他選擇...
您需要超過4 TB的RAM。我認爲你沒有足夠的交換空間。 – Daniel
請參閱https://stackoverflow.com/questions/1053928/very-large-matrices-using-python-and-numpy – clockwatcher
你不可能在一個消費者級別的個人電腦上存儲具有萬億元素的數組。即使你使用輔助內存,你也需要一個TB級的硬盤。你真的想用10^6×10^6陣列做什麼?這可能是一個XY問題 – JacaByte