我正在尝试找到一种有效的方法来在Python中生成300,000,000个随机1和-1的累积和。我已经能够使用下面的解决方案,n 最多约为 30,000,000。但如果我尝试更大的数字,我就会遇到内存问题。
def tosses(n):
return np.cumsum(np.random.choice([-1,1],n))
您可以将数组分成更小的块。创建一个 for 循环,以
chunk_size
的步长从 0 迭代到 n。在此循环中,生成数组块如下:
chunk = np.random.choice([-1, 1], min(chunk_size, n - i))
然后,计算每个块的累积和 (cumsum) 并将结果添加到输出数组中。
这不是唯一的方法。您还可以使用内存映射文件来处理大型数组,而无需将它们完全加载到内存中。
您遇到了内存问题,因为您正在用 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 中调用它。