scipy.stats.norm 用于值数组

max*_*mir 1 python numpy gaussian scipy probability-density

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

scipy.stats.norm.pdf(9, [10, 12, 14], [2, 4, 5])
Run Code Online (Sandbox Code Playgroud)

它为我提供了值 9 的 pdf 值,对于三个不同的高斯函数 - N(10, 2)、N(12, 4) 和 N(14, 5)。我想对多个值做同样的事情,就像这样

scipy.stats.norm.pdf([8,9], [10, 12, 14], [2, 4, 5])
Run Code Online (Sandbox Code Playgroud)

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

问题

  1. numpy 或 scipy 中是否有任何东西可以让我做到这一点?
  2. 如果#1 的答案是否定的,那么如何在不使用 for 循环的情况下完成此操作(请注意,我查看了 scipy 中的矢量化,但它在幕后使用了 for 循环)。我需要避免 for 循环,因为我将针对几个高斯函数对数百万个值执行此操作。

War*_*ser 5

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]])
Run Code Online (Sandbox Code Playgroud)