вызовы scipy.stats.multivariate_normal.logpdf () с этой матрицей Covariance wyields следующую ошибку:
Массив 'cov' должен быть не более двухмерным, но cov.ndim
= 3 < /p>
< /blockquote>
Когда я осматриваю исходный код, я вижу следующее: < /p>
Код: Выделить всё
def _logpdf(self, x, mean, cov_object):
"""Log of the multivariate normal probability density function.
Parameters
----------
x : ndarray
Points at which to evaluate the log of the probability
density function
mean : ndarray
Mean of the distribution
cov_object : Covariance
An object representing the Covariance matrix
Notes
-----
As this function does no argument checking, it should not be
called directly; use 'logpdf' instead.
"""
log_det_cov, rank = cov_object.log_pdet, cov_object.rank
dev = x - mean
if dev.ndim > 1:
log_det_cov = log_det_cov[..., np.newaxis]
rank = rank[..., np.newaxis]
maha = np.sum(np.square(cov_object.whiten(dev)), axis=-1)
return -0.5 * (rank * _LOG_2PI + log_det_cov + maha)
Моя идея состояла в том, чтобы написать пользовательские функции для log_pdet () , rank () и отбелить () , которые являются совместимыми с 3d -формой и используют эти для вычисления. Функции рассчитываются по -разному в зависимости от метода Factorty: < /p>
Код: Выделить всё
# CovViaPrecision
def _whiten(self, x):
return x @ self._chol_P
# CovViaDiagonal
def _whiten(self, x):
return _dot_diag(x, self._LP)
# CovViaCholesky
def _whiten(self, x):
return linalg.solve_triangular(self._factor, x.T, lower=True).T
Подробнее здесь: https://stackoverflow.com/questions/796 ... nce-matrix