【发布时间】:2021-09-15 17:28:43
【问题描述】:
我正在尝试编写一个 python 代码来计算随机停止的总和,但是当随机生成的数字的大小超过 5 时遇到问题。
MemoryError: 无法为形状为 (49, 53, 43, 46, 52, 53, 57, 52, 52) 且数据类型为 float64 的数组分配 15.5 PiB
在以下代码中:
#Create a function tn.func to calculate randomly stopped sum
import numpy as np
#Define a function
def tn_fun(n):
return sum(np.random.choice([50, 100, 200], n, replace=True, p=[0.3, 0.5, 0.2]))
N = np.random.poisson(50, 10)
# #Generate 10000 random values of N, using lambda = 50
TN = tn_fun(N)
print('Sample mean of the randomly stopped sum TN is',np.mean(TN))
print('Sample variance of the randomly stopped sum TN is', np.var(TN))
【问题讨论】:
-
我不认为你明白你的要求。
np.random.choice的第二个参数是您希望它创建的矩阵的大小。如果你传递它 [100,100,100],它将创建一个 100x100x100 的数组。你期望它做什么? -
我会说使用 numpy.memmap,但不确定 15PiB 的 HDD 应该有多大,并且不知道大 mmemapp 可以处理的滚刀
-
查看您的 cmets,也许您期望 [50,100,200] 是数组的大小。如果是这样,您需要交换前两个参数。当然,这意味着您的
p数组不再与输入的形状匹配。 -
@TimRoberts 我试图找到 n 个观察值的总和,其中 n 在本质上也是随机的。这就是我从泊松分布生成 n 的方式。在将这个随机生成的 n 传递给参数时,我在计算 TN 的样本均值和样本方差时遇到了问题。
标签: python random numpy-ndarray