numpy数组中有多少内存? RAM是限制因素吗?

时间:2012-06-28 21:51:21

标签: python arrays memory numpy

我正在使用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,它是否无法实际生成阵列?

另外,如果实现此代码的效率更高,我会很感激提示:)

2 个答案:

答案 0 :(得分:22)

几点:

  • numpy数组的内存大小很容易计算。它只是元素的数量乘以数据大小,加上一个小的恒定开销。例如,如果您的cube.dtypeint64,并且它有1,000,000个元素,则需要1000000 * 64 / 8 = 8,000,000个字节(8Mb)。
  • 但是,正如@Gabe所说,100 * 100 * 1,000,000双打需要大约80 Gb
  • 这不会导致任何事情发生故障,但由于您的计算机需要执行的所有swapping操作都会非常慢。
  • 你的循环不符合你的期望。 cube不会替换element = matrix中的元素,而只会覆盖element变量,而cube保持不变。 entry = random.rand() * 100
  • 也是如此
  • 请参阅:http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#modifying-array-values

答案 1 :(得分:2)

对于函数的“内部”部分,请查看numpy.random模块

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