Итак, у меня есть такая функция:
def logpp(X,m,S):
# Find the number of dimensions from the data vector
d = X.shape[1]
# Invert the covariance matrix
Sinv = np.linalg.inv(S)
# Compute the quadratic terms for all data points
Q = -0.5*(np.dot(X-m,Sinv)*(X-m)).sum(axis=1)
# Raise them quadratic terms to the exponential
Q = np.exp(Q)
# Divide by the terms in the denominator
P = Q / np.sqrt((2*np.pi)**d * np.linalg.det(S))
# Take the product of the probability of each data points
Pprod = np.prod(P)
# Return the log-probability
return np.log(Pprod)
Когда я генерирую больший ввод, результат будет переполнен. Как переписать порядок, чтобы избежать переполнения?
Моя функция ввода:
X1 = numpy.random.mtrand.RandomState(123).normal(0,1,[5,len(m1)])
X2 = numpy.random.mtrand.RandomState(123).normal(0,1,[20,len(m2)])
X3 = numpy.random.mtrand.RandomState(123).normal(0,1,[100,len(m3)])