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

2024-05-15 02:10:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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,它是否真的无法生成阵列?

另外,如果有更有效的方法来实现这段代码,我将非常感谢以下提示:)


Tags: inimportnumpyfor条目random数组element
2条回答

几点:

  • numpy数组的内存大小易于计算。它只是元素的数量乘以数据大小,再加上一个小的常量开销。例如,如果您的cube.dtypeint64,并且它有1000000个元素,则需要1000000 * 64 / 8 = 8,000,000字节(8Mb)。
  • 然而,正如@Gabe所指出的,100*100*1000000个双倍需要大约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

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

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

相关问题 更多 >

    热门问题