scipy.stats.norm用于值数组

时间:2017-03-12 20:38:16

标签: python numpy scipy gaussian probability-density

我想使用具有不同均值和方差的高斯计算一组数值的概率值。例如,我可以这样做

scipy.stats.norm.pdf(9, [10, 12, 14], [2, 4, 5])

它给出了值9的pdf值,对于三个不同的高斯--N(10,2),N(12,4)和N(14,5)。我想为多个值做同样的事情,比如

scipy.stats.norm.pdf([8,9], [10, 12, 14], [2, 4, 5])

其中为三个高斯计算了8和9的pdf值,并且我得到一个2D数组作为返回。

问题

  1. 有什么东西在numpy或scipy中允许我这样做吗?
  2. 如果对#1的回答是否定的,我怎么能在不使用for循环的情况下完成此任务(请注意,我在scipy中查看了vectorize,但它在引擎盖下使用了for循环)。我需要避免使用for循环,因为我会在数百万个值上执行此操作,对于几个高斯人来说。

1 个答案:

答案 0 :(得分:4)

pdf方法将使用numpy broadcasting,因此在第二个示例中,您可以将第一个参数设为数组(实际上,"类似数组"就足够了)形状(2,1)。具有形状(2,1)的数组与具有形状(3,)的数组一起广播,得到具有形状(2,3)的数组:

In [14]: norm.pdf([[8],[9]], [10, 12, 14], [2, 4, 5])
Out[14]: 
array([[ 0.12098536,  0.06049268,  0.03883721],
       [ 0.17603266,  0.07528436,  0.04839414]])