如何生成 300,000,000 个随机 1 和 -1 的累积和

问题描述 投票:0回答:2

我正在尝试找到一种有效的方法来在Python中生成300,000,000个随机1和-1的累积和。我已经能够使用下面的解决方案,n 最多约为 30,000,000。但如果我尝试更大的数字,我就会遇到内存问题。

def tosses(n):
    return np.cumsum(np.random.choice([-1,1],n))
python numpy memory random cumsum
2个回答
0
投票

您可以将数组分成更小的块。创建一个 for 循环,以

chunk_size
的步长从 0 迭代到 n。在此循环中,生成数组块如下:

chunk = np.random.choice([-1, 1], min(chunk_size, n - i))

然后,计算每个块的累积和 (cumsum) 并将结果添加到输出数组中。

这不是唯一的方法。您还可以使用内存映射文件来处理大型数组,而无需将它们完全加载到内存中。


0
投票

您遇到了内存问题,因为您正在用 3 亿个 int 元素填充数组。

无需数组也可以获得相同的结果。

from random import *

def tosses(n):
    sum = 0.0
    for i in range (0,n):
        sum += -1.0 if randint(0,1) == 0 else 1.0
    return sum

你不会有内存问题,但仍然很慢。

要更进一步,您可以编写一个 C++ 等效代码并从 python 中调用它。

© www.soinside.com 2019 - 2024. All rights reserved.