在调用时,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
更好吗?这似乎以某种方式是错误的。
答案 0 :(得分:0)
无论如何,您可以尝试通过先从multinoulli (categorical) distribution进行采样,然后对其结果求和来进行20次(或N卷)。
排成一线(Python 3.7,x64,Anaconda Windows 10)
base64 decoder
上面用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)
调用的代码将返回20个掷骰子的采样向量。您可以将结果与调用mymultinomial(20, 6*[1./6.])
的结果进行比较,而我的快速测试没有统计差异。
您也可以通过np.random.multinomial(20, 6*[1./6.])
进行采样,也可以对其进行测试(可能可以更快地进行矢量化处理)
choice()