簡體   English   中英

numpy數組中有多少內存? RAM是限制因素嗎?

[英]How much memory in numpy array? Is RAM a limiting factor?

我正在使用numpy創建一個邊長為100的立方體數組,因此總共包含100萬個條目。 對於每百萬個條目,我插入一個100x100矩陣,其條目由隨機生成的數字組成。 我使用以下代碼來執行此操作:

import random
from numpy import *

cube = arange(1000000).reshape(100,100,100)

for element in cube.flat:
    matrix = arange(10000).reshape(100,100)
    for entry in matrix.flat:
        entry = random.random()*100
    element = matrix

我期待這需要一段時間,但是生成了100億個隨機數,我不確定我的電腦是否可以處理它。 這樣一個陣列會占用多少內存? RAM是一個限制因素,即如果我的計算機沒有足夠的RAM,它是否無法實際生成陣列?

此外,如果有更高效的實現此代碼,我會很感激提示:)

幾點:

  • numpy數組的內存大小很容易計算。 它只是元素的數量乘以數據大小,加上一個小的常量開銷。 例如,如果你的cube.dtypeint64 ,並且它有1,000,000個元素,那么它將需要1000000 * 64 / 8 = 8,000,000 cube.dtype 1000000 * 64 / 8 = 8,000,000字節(8Mb)。
  • 但是,正如@Gabe指出的那樣,100 * 100 * 1,000,000雙打將需要大約80 Gb
  • 這不會導致任何“破壞”本身,但由於您的計算機需要進行的所有交換 ,操作將會非常緩慢。
  • 你的循環不會達到預期的效果。 element = matrix不是替換cube的元素,而是簡單地覆蓋element變量,保持cube不變。 entry = random.rand() * 100
  • 相反,請參閱: http//docs.scipy.org/doc/numpy/reference/arrays.nditer.html#modifying-array-values

對於函數的“內部”部分,請查看numpy.random模塊

import numpy as np
matrix = np.random.random((100,100))*100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM