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。
问题
- numpy 或 scipy 中是否有任何允许我执行此操作的内容?
- 如果 #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]])
我想使用具有不同均值和方差的高斯分布来计算值数组的概率值。例如,我可以做到这一点
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。
问题
- numpy 或 scipy 中是否有任何允许我执行此操作的内容?
- 如果 #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]])