【问题标题】:How to pass an array of random numbers to random.choice while defining a function?如何在定义函数时将随机数数组传递给 random.choice?
【发布时间】: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


【解决方案1】:

这似乎是你要求的。

import numpy as np

# How many samples should there be?

# This is uniform between 5000 and 15000.
#N = np.random.randint(5000, 15000)

# This picks one number with Poisson distribution centered at 10000.
N = np.random.poisson(10000, 1)[0]

# Generate them.

TN = np.random.choice( [50,100,200], N, p=[0.3,0.5,0.2] )

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))

【讨论】:

  • 我试图找到一个截断的总和 $T_N = X_1+X_2+\ldots+X_N$,其中 $X_1, X_2, . . .X_N$ 是 N 个观测值,并且与 N 个相互独立。$X_i \in \{50, 100, 200\}$ 具有概率分布 $\{0.3, 0.5, 0.2\}$。
  • 好的,那么你的关键缺陷在于生成 N。你只希望 N 是一个单一的数字,表示你想要多少个样本。您的代码生成 N 作为 10 个元素的数组。我已经修改了我的代码。
  • 正确指出。现在问题已经解决了。谢谢。
  • N=np.random.randint(5000, 15000) 的问题现在已经解决,但对于 N = np.random.poisson(50, 10000) 则不起作用。
  • 当然不是,因为它们做了两件完全不同的事情!第一个在该范围内生成一个数字。第二个生成 10,000 个数字。你不想在这里poisson。您是否阅读过np.random.poisson 的文档?你看过它产生了什么吗?
猜你喜欢
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
相关资源
最近更新 更多