Что занимает так много времени?
Для учета отношений между переменными NumPy computes the singular value decomposition вашей ковариационной матрицы, и это занимает большую часть времени (underlying GESDD в общем Q (п) и 5000 уже немного).
Как можно ускорить процесс?
В простейшем случае со всеми переменными независимыми, вы могли бы просто использовать random.normal
:
from numpy.random import normal
sample = normal(means, deviations, len(means))
В противном случае, если ковариационная матрица случается полный ранг (следовательно, положительно определенной), вытеснит svd
с cholesky
(прежнему Θ (п) в целом, но с меньшим постоянным):
from numpy.random import standard_normal
from scipy.linalg import cholesky
l = cholesky(covariances, check_finite=False, overwrite_a=True)
sample = means + l.dot(standard_normal(len(means)))
Если матрица может быть вырожденной (как это сом в этом случае), затем либо оберните SPSTRF, либо подумайте о помощи с scipy#6202.
Cholesky, вероятно, будет заметно быстрее, но если этого недостаточно, то вы можете исследовать, если бы было невозможно анализировать аналитическую матрицу или попытаться использовать другую базовую библиотеку (такую как ACML, MKL, или cuSOLVER).
Это работает для меня. Те же версии. измените третью строку на это, посмотрите, работает ли она: 'beta_true = np.random.multivariate_normal (mean_true, cov_true, size = 1) .T' – Yugi
да, просто другой импорт, сколько времени вам нужно для запуска этого линия? – 1a1a11a
«Да» означает, что он работал и не принимал 100% -ный процессор? Мой: '--- 15.3049829006 секунд ---' – Yugi