我知道,一些scipy.stats pdf函数是矢量化的,如手册中所述。
我的问题是,我尝试用Dirichlet进行矢量化,scipy.stats.dirchlet.pdf(x, alpha)跳过,我可以为同一个alpha参数计算多个x的值数组。
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)堆叠它们这是不起作用的,因为西西抛出了以下错误:
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = (1000000, 3).这(据我理解)表明,函数没有被矢量化,至少以我预期的方式是如此。
f = np.vectorize(st.dirichlet.pdf)对函数进行矢量化,然后用叠加的αf(x, alpha)调用新函数f这不起作用,因为西西抛出了以下错误:
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = ().我认为这是因为我误用了np.vectorize()函数,或者pdf函数不能以这种方式向量化。
所以,如果可以将这个函数向量化,我怎么能做到呢?这工作值得吗?我的意思是,在我的简单理解中,矢量化几乎总是有助于加速这类代码,但我不确定是否是这样。
https://stackoverflow.com/questions/67855329
复制相似问题