带有数组向量的scipy truncnorm作为a和b的argumnents

时间:2015-02-23 02:11:39

标签: python arrays numpy scipy

所以我需要使用Python中的truncnorm函数来评估具有零下限的截断正态分布的值的可能性。

由于truncnorm适用于标准正态分布,因此如果您使用自己的ab参数,则必须重新参数化musigmaab写为(myclip - mu) / sigma

我需要在musigma的不同参数化下一次评估多个值,这意味着我必须将数组作为ab的参数。但是,每次我这样做时都会收到错误消息。下面是一些简化的示例代码:

import numpy as np
from scipy.stats import truncnorm
v = np.array([5, 4])
mus = np.ones(2)
sigmas = np.ones(2)
a = (0 - mus) / sigmas
b = np.ones(2) * np.inf

like = truncnorm.pdf(vals, a, b, mus, sigmas)

我收到此错误消息:

cond0 = self._argcheck(*args) & (scale > 0)
File "/Users/adamosth/anaconda/lib/python2.7/sitepackages/scipy/stats/_continuous_distns.py", line 3818, in _argcheck
if self.a > 0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

如果a作为单个值输入,我没有问题,但这并不是我真正想要的。

1 个答案:

答案 0 :(得分:0)

更新scipy v0.13到v0.14后,我遇到了同样的问题。它仍然无法在v0.15中工作(我现在已安装)。所以我可以确认你的错误。

目前我通过逐个循环遍历所有值来使用解决方法,这当然是非常慢而不是真正的长期解决方案。我希望有人有更好的建议。