9

我正在使用 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,它会无法实际生成数组吗?

另外,如果有更有效的方法来实现此代码,我将不胜感激:)

4

2 回答 2

23

几点:

  • numpy 数组在内存中的大小很容易计算。它只是元素数量乘以数据大小,加上一个小的常量开销。例如,如果您的cube.dtypeis int64,并且它有 1,000,000 个元素,它将需要1000000 * 64 / 8 = 8,000,000字节 (8Mb)。
  • 但是,正如@Gabe 所指出的,100 * 100 * 1,000,000 双打将需要大约80 Gb
  • 这不会导致任何东西“破坏”,就其本身而言,但操作会非常缓慢,因为你的计算机需要做的所有交换。
  • 你的循环不会像你期望的那样。不会替换 中的元素,而是cube简单element = matrix地覆盖element变量,保持cube不变。对于entry = random.rand() * 100.
  • 相反,请参阅:http ://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#modifying-array-values
于 2012-06-28T21:59:51.710 回答
2

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

import numpy as np
matrix = np.random.random((100,100))*100
于 2012-06-28T22:39:12.017 回答