stats.multivariate_normal.pdf - 新数组的总大小必须保持不变

时间:2018-02-24 19:37:22

标签: python numpy scipy covariance

我不确定为什么stats.multivariate_normal.pdf不起作用。 目前我有

X.shape = (150, 2)  
meanX.shape = () # just a float
covX.shape = (150,)

其中

meanL = np.float(np.mean(xL))
covL = np.cov(xL)
stats.multivariate_normal.pdf(xL.T, np.full((150,), meanL), covL)

我得到的错误是:"新数组的总大小必须保持不变"

现在我试着回答:

LinAlgError                               Traceback (most recent call last)
<ipython-input-77-4c0280512087> in <module>()
  2 meanL = np.full((150,), meanL)
  3 covL = np.cov(xL)
----> 4 stats.multivariate_normal.pdf(xL.T, meanL, covL)
  5 

/Users/laura/anaconda/lib/python3.5/site-packages/scipy/stats/_multivariate.py in pdf(self, x, mean, cov, allow_singular)
497         dim, mean, cov = self._process_parameters(None, mean, cov)
498         x = self._process_quantiles(x, dim)
--> 499         psd = _PSD(cov, allow_singular=allow_singular)
500         out = np.exp(self._logpdf(x, mean, psd.U, psd.log_pdet, psd.rank))
501         return _squeeze_output(out)

/Users/laura/anaconda/lib/python3.5/site-packages/scipy/stats/_multivariate.py in __init__(self, M, cond, rcond, lower, check_finite, allow_singular)
148         d = s[s > eps]
149         if len(d) < len(s) and not allow_singular:
--> 150             raise np.linalg.LinAlgError('singular matrix')
151         s_pinv = _pinv_1d(s, eps)
152         U = np.multiply(u, np.sqrt(s_pinv))

LinAlgError: singular matrix

我收到以下错误:

{{1}}

1 个答案:

答案 0 :(得分:0)

我无法重现您获得的确切错误,但尺寸必须匹配: 均值和协方差需要有形状(N,)和(N,N)。并且X必须具有宽度N.通过广播可以减轻一些但不是所有这些要求。无论如何,以下内容对我有用:

>>> X = np.random.random((150,2))
>>> meanX = 0.5
>>> covX = np.identity(150)
>>> print(stats.multivariate_normal.pdf(X.T, np.full((150,), meanX), covX))
[4.43555177e-63 2.84151145e-63]

更新从更新的Q我怀疑你想要

>>> X = np.random.random((150,2))
>>> 
>>> meanX = np.mean(X, axis=0)
>>> covX = np.cov(X.T)
>>> stats.multivariate_normal.pdf(X, meanX, covX)
array([0.83292328, 0.18944144, 0.37425605, 1.22840732, 0.5089164 ,
       1.78568641, 0.31210331, 0.64079837, 1.05805662, 0.66416311,
       0.77964264, 0.65744803, 0.53025325, 1.22309949, 1.62169299,
       0.84558019, 1.23537247, 0.44383979, 1.45601888, 0.85368635,
...