首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多次调用np.random.multinomial的行为是什么?

多次调用np.random.multinomial的行为是什么?
EN

Stack Overflow用户
提问于 2020-06-01 02:59:28
回答 1查看 213关注 0票数 1

当被调用时,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是否更好?不知何故,这似乎是错误的。

EN

回答 1

Stack Overflow用户

发布于 2020-06-01 04:23:08

无论如何,您可以尝试执行20次(或任意N次滚动),方法是首先从multinoulli (categorical) distribution中采样,然后对结果求和。

(Python3.7,x64,Anaconda Windows10)

代码语言:javascript
复制
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()进行采样,也可以对其进行测试(可能可以更快地进行矢量化)

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62121098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档