scipy.stats.norm 值数组

scipy.stats.norm for array of values

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

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 值是针对三个高斯分布计算的,我会得到一个二维数组作为 return。

问题

  1. numpy 或 scipy 中是否有任何允许我执行此操作的内容?
  2. 如果 #1 的答案是否定的,我如何在不使用 for 循环的情况下完成此操作(请注意,我查看了 scipy 中的 vectorize,但它在底层使用了 for 循环)。我需要避免 for 循环,因为我将针对几个高斯分布对数百万个值执行此操作。

pdf 方法将使用 numpy broadcasting,因此在您的第二个示例中,您可以将第一个参数设为数组(实际上,"array-like" 就足够了),形状为 (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]])