当被调用时,np.random.multinomial和其他采样函数从所选的概率分布中提供一定数量的独立样本。例如,
np.random.multinomial(20, [1/6.]*6, size=2)
表示掷骰子20次,然后再掷20次。
但是,如果连续调用np.random.multinomial(1, [1/6.]*6, size=1)一千次,会发生什么呢?我会得到一千个独立的掷骰子吗,即np.random.multinomial是否保证独立的样本和连续调用之间的正确分布?从经验上看,调用之间似乎存在一些重要的相关性。在每次呼叫之前重置np.random.RandomState是否更好?不知何故,这似乎是错误的。
发布于 2020-06-01 04:23:08
无论如何,您可以尝试执行20次(或任意N次滚动),方法是首先从multinoulli (categorical) distribution中采样,然后对结果求和。
(Python3.7,x64,Anaconda Windows10)
import numpy as np
def mymultinomial(n: int, p):
"""Hand made multinomial"""
q = np.random.multinomial(1, p, size=n)
return np.sum(q, axis=0)上面用mymultinomial(20, 6*[1./6.])调用的代码将返回一个包含20次掷骰子的采样向量。您可以将结果与对np.random.multinomial(20, 6*[1./6.])的调用进行比较,我的快速测试显示没有统计差异。
你也可以通过choice()进行采样,也可以对其进行测试(可能可以更快地进行矢量化)
def mymultinomial(n: int, p):
"""Hand made multinomial, choice"""
r = np.zeros(len(p), dtype = np.int64)
for _ in range(0, n):
q = np.random.choice(len(p), size=1, replace=True, p=p)
r[q] += 1
return rhttps://stackoverflow.com/questions/62121098
复制相似问题