Python 多次调用np.random.multi多项式的行为是什么?

Python 多次调用np.random.multi多项式的行为是什么?,python,numpy,random,random-seed,Python,Numpy,Random,Random Seed,调用时,np.random.multinomial和其他采样函数从所选概率分布中给出一定数量的独立样本。比如说, np.随机.多项式(20[1/6.]*6,大小=2) 表示掷骰子20次,然后再掷骰子20次 然而,如果你连续一千次调用np.random.multinomial(1[1/6.]*6,size=1)?我会得到一千个独立的骰子卷吗,也就是说,np.random.多项式是否保证独立样本和连续调用之间的正确分布?从经验上看,电话之间似乎存在着一些显著的相关性。每次通话前重置np.random

调用时,
np.random.multinomial
和其他采样函数从所选概率分布中给出一定数量的独立样本。比如说,

np.随机.多项式(20[1/6.]*6,大小=2)

表示掷骰子20次,然后再掷骰子20次


然而,如果你连续一千次调用
np.random.multinomial(1[1/6.]*6,size=1)
?我会得到一千个独立的骰子卷吗,也就是说,
np.random.多项式
是否保证独立样本和连续调用之间的正确分布?从经验上看,电话之间似乎存在着一些显著的相关性。每次通话前重置
np.random.RandomState
是否更好?这似乎有点错误。

无论如何,你可以尝试从第一个样本中抽取20个(或任意N个卷),然后对结果求和

沿途(Python 3.7、x64、Anaconda Windows 10)

上面用My多项式(20,6*[1./6.])调用的代码将返回一个20掷骰子的采样向量。您可以将结果与调用
np.random.multinomial(20,6*[1./6.])
进行比较,我的快速测试显示没有统计差异

您也可以通过
choice()
进行采样,也可以对其进行测试(可能可以更快地进行矢量化)


无论如何,你们可以试着做20次(或任意N次),从第一个样本中取样,然后对结果求和

沿途(Python 3.7、x64、Anaconda Windows 10)

上面用My多项式(20,6*[1./6.])调用的代码将返回一个20掷骰子的采样向量。您可以将结果与调用
np.random.multinomial(20,6*[1./6.])
进行比较,我的快速测试显示没有统计差异

您也可以通过
choice()
进行采样,也可以对其进行测试(可能可以更快地进行矢量化)


不知道问题出在哪里。所以你想用n=1的多项式,用multinoulli(又名分类)对多项式分布进行抽样?你也可以通过np.choice来取样multinoulli。你能展示一下导致相关性结论的代码和数据吗?展示一下你是如何确定你所说的相关性的。不幸的是,这只是轶事证据。一旦我进行了更系统的分析,似乎连续的调用是独立的。要确认,在多次使用这些函数时,不需要多次设置种子,对吗?不确定问题出在哪里。所以你想用n=1的多项式,用multinoulli(又名分类)对多项式分布进行抽样?你也可以通过np.choice来取样multinoulli。你能展示一下导致相关性结论的代码和数据吗?展示一下你是如何确定你所说的相关性的。不幸的是,这只是轶事证据。一旦我进行了更系统的分析,似乎连续的调用是独立的。要确认,在多次使用这些函数时,无需多次设置种子,对吗?
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)
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 r