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

标签 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,它会无法实际生成数组吗?

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

最佳答案

几点:

  • numpy 数组在内存中的大小很容易计算。它只是元素数量乘以数据大小,加上一个小的常量开销。例如,如果您的 cube.dtypeint64,并且它有 1,000,000 个元素,则它将需要 1000000 * 64/8 = 8,000,000 个字节( 8Mb)。
  • 不过,正如@Gabe 所说,100 * 100 * 1,000,000 个 double 大约需要 80 Gb .
  • 这本身不会导致任何“中断”,但由于所有 swapping您的计算机将需要这样做。
  • 您的循环不会达到您的预期。 element = matrix 不会替换 cube 中的元素,而是简单地覆盖 element 变量,而 cube 保持不变. entry = random.rand() * 100 也是如此。
  • 请参阅:http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#modifying-array-values

关于python - numpy数组中有多少内存? RAM 是限制因素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11253443/

相关文章:

python - 为什么我的交换功能交换到位?

python - 计算对类和任何子类的某些方法的调用

javascript - 使用 javascript 生成在 Qualtrics 中的调查之间不会重复的随机数

javascript - 在 ReactJS 中将单个对象转换为对象数组

java - 查找文件中最常出现的字节

java - 在 Java 中获取计算机内存信息

r - 以交互方式处理占用大量内存的列表对象

python - webdriver.Firefox() 与 selenium 的错误

python - pandas scatter_matrix 函数中 'ax' 关键字的用途

c++ - 每当调用 malloc/free 时输出到 stderr