首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >它可以矢量化的枕部Dirichlet PDF函数吗?

它可以矢量化的枕部Dirichlet PDF函数吗?
EN

Stack Overflow用户
提问于 2021-06-06 02:18:28
回答 1查看 216关注 0票数 1

我知道,一些scipy.stats pdf函数是矢量化的,如手册中所述。

我的问题是,我尝试用Dirichlet进行矢量化,scipy.stats.dirchlet.pdf(x, alpha)跳过,我可以为同一个alpha参数计算多个x的值数组。

代码语言:javascript
复制
import numpy as np
import scipy.stats as st

alpha = [1,10,1]
list_of_xs = np.random.dirichlet(alpha,10**6)

values = np.array([st.dirichlet.pdf(x, alpha) for x in list_of_xs)])

老实说,我真的不需要将pdf函数向量化,但是使用for循环执行它需要很长时间,以至于我跳到了矢量化可以加速代码。

我试过的东西

  • alpha传递为一个形状(10**6, 3)数组,用np.vstack([alpha] * 10**6)堆叠它们

这是不起作用的,因为西西抛出了以下错误:

代码语言:javascript
复制
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = (1000000, 3).

这(据我理解)表明,函数没有被矢量化,至少以我预期的方式是如此。

  • f = np.vectorize(st.dirichlet.pdf)对函数进行矢量化,然后用叠加的αf(x, alpha)调用新函数f

这不起作用,因为西西抛出了以下错误:

代码语言:javascript
复制
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = ().

我认为这是因为我误用了np.vectorize()函数,或者pdf函数不能以这种方式向量化。

所以,如果可以将这个函数向量化,我怎么能做到呢?这工作值得吗?我的意思是,在我的简单理解中,矢量化几乎总是有助于加速这类代码,但我不确定是否是这样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-06 06:03:50

只需转换第一个参数,就可以得到所需的确切结果:

代码语言:javascript
复制
st.dirichlet.pdf(list_of_xs.T, alpha)

关于dirichlet的文档暗示这可能是可能的,但是链接是一团糟的,所以从来没有明确声明:

注意,dirichlet接口有点不一致。rvs函数返回的数组相对于pdflogpdf所期望的格式被转换。

在一个相关的注意事项上,我已经将PR #14190提交给can,以查看文档上的链接是否可以修复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67855329

复制
相关文章

相似问题

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