Python 是否可以将scipy Dirichlet PDF函数矢量化?
我知道一些Python 是否可以将scipy Dirichlet PDF函数矢量化?,python,numpy,scipy,vectorization,Python,Numpy,Scipy,Vectorization,我知道一些scipy.statspdf函数是开箱即用的矢量化函数,如中所述 我的问题是,我尝试利用Dirichlet的pdf的这种矢量化,希望我可以为同一个alpha参数计算多个x的值数组。可以得到与之相同的结果的东西 将numpy导入为np 将scipy.stats导入为st α=[1,10,1] _xs=np.random.dirichlet的列表(alpha,10**6) values=np.array([st.dirichlet.pdf(x,alpha)表示列表中的x] 老实说,我真的
scipy.stats
pdf函数是开箱即用的矢量化函数,如中所述
我的问题是,我尝试利用Dirichlet的pdf的这种矢量化,希望我可以为同一个alpha
参数计算多个x
的值数组。可以得到与之相同的结果的东西
将numpy导入为np
将scipy.stats导入为st
α=[1,10,1]
_xs=np.random.dirichlet的列表(alpha,10**6)
values=np.array([st.dirichlet.pdf(x,alpha)表示列表中的x]
老实说,我真的不需要对pdf函数进行矢量化,但是使用for
循环执行它需要很长时间,以至于我希望矢量化可以加速代码
我尝试过的事情
- 将
作为形状数组传递alpha
将它们与(10**6,3)
np.vstack([alpha]*10**6)
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = (1000000, 3).
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = ().
这(在我的理解中)表明,函数并不是开箱即用的矢量化,至少在我预期的方式中是这样
- 使用
对函数进行向量化,然后使用堆叠的alphaf=np.vectorize(st.dirichlet.pdf)
f(x,alpha)
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = (1000000, 3).
ValueError: Parameter vector 'a' must be one dimensional, but a.shape = ().
我认为这是因为我误用了np.vectorize()
函数,或者pdf函数不能以这种方式进行矢量化
那么,如果有可能对这个函数进行矢量化,我该怎么做呢?这项工作值得吗?我的意思是,在我的简单理解中,矢量化几乎总是有助于加速这类代码,但我不确定这里的情况是否如此。只需转置第一个参数,就可以得到想要的确切结果:
st.dirichlet.pdf(list_of_xs.T, alpha)
文档提示这可能是可能的,但链接非常混乱,因此从未明确说明:
请注意,dirichlet接口有些不一致。rvs函数返回的数组将根据pdf
和logpdf
所期望的格式进行转换
另一方面,我已经向scipy提交了一份相关说明,以查看文档上的链接是否可以修复。为什么不传入一个字母shape
(N*3,)
,并将其重塑为(N,3)
@madpysicator,我不太明白。。。传递形状(N*3,)
的alpha
会抛出错误向量“x”的条目数必须与参数向量“a”的条目数相同,或者比参数向量“a”的条目数少一条
,并将其整形为(N,3)
与将它们与np.vstack()
叠加在一起是一样的,不是吗?另外,对于Dirichlet pdf,保持alpha
的维度不是很重要吗?