У меня есть следующая функция в python, которую я не могу понять, как выразить в векторизованной форме. Для меня cov - это массивный массив формы (2,2), mu - средний вектор с формой (2) и xtp имеет форму (~ 50000,2). Я знаю, что scipy предоставляет scipy.stats.multivariate_normal.pdf, но я пытаюсь научиться писать эффективный векторизованный код. ПожалуйстаКак записать этот код в векторном формате?
def mvnpdf(xtp, mu, cov):
temp = np.zeros(xtp.shape[0])
i = 0
length = xtp.shape[0]
const = 1/(((2* np.pi)**(len(mu)/2)) * (np.linalg.det(cov)**(1/2)))
inv = np.linalg.inv(cov)
while i < length:
x = xtp[i]-mu
exponent = (-1/2) * (x.dot(inv).dot(x))
temp[i] = (const * np.exp(exponent))
i+=1
return temp
Большое спасибо. einsum выглядит потрясающе. Полученный код намного быстрее. Есть ли у вас хорошие ресурсы для изучения использования enisum? – enitihas
@enitihas: относительно немного ресурсов, разбросанных по сети, но вот вопрос SO с некоторыми ответами и ссылками: http://stackoverflow.com/questions/26089893/understanding-einsum-numpy –