def dist(self, x, y): # Adapted from equation 6.13 of "Positive definite matrices". Chol # decomp gives the same result as matrix sqrt. There may be a more # efficient way to compute this! c = np.linalg.cholesky(x) c_inv = np.linalg.inv(c) l = multilog(multiprod(multiprod(c_inv, y), multitransp(c_inv)), pos_def=True) return la.norm(multiprod(multiprod(c, l), c_inv))
def dist(self, x, y): # Adapted from equation 6.13 of "Positive definite matrices". The # Cholesky decomposition gives the same result as matrix sqrt. There # may be more efficient ways to compute this. c = la.cholesky(x) c_inv = la.inv(c) logm = multilog(multiprod(multiprod(c_inv, y), multitransp(c_inv)), pos_def=True) return la.norm(logm)
def test_multilog(self): A = np.zeros((self.k, self.m, self.m)) L = np.zeros((self.k, self.m, self.m)) for i in range(self.k): a = np.diag(rnd.rand(self.m)) q, r = la.qr(rnd.randn(self.m, self.m)) A[i] = q.dot(a.dot(q.T)) L[i] = logm(A[i]) np_testing.assert_allclose(multilog(A, pos_def=True), L)
def test_multilog(self): A = np.zeros((self.k, self.m, self.m)) l = np.zeros((self.k, self.m, self.m)) for i in range(self.k): a = np.diag(rnd.rand(self.m)) q, r = la.qr(rnd.randn(self.m, self.m)) A[i] = q.dot(a.dot(q.T)) l[i] = logm(A[i]) np_testing.assert_allclose(multilog(A, pos_def=True), l)
def dist(self, x, y): c = la.cholesky(x) c_inv = la.inv(c) logm = multilog(multiprod(multiprod(c_inv, y), multihconj(c_inv)), pos_def=True) return np.real(la.norm(logm))
def log(self, x, y): c = la.cholesky(x) c_inv = la.inv(c) logm = multilog(multiprod(multiprod(c_inv, y), multitransp(c_inv)), pos_def=True) return multiprod(multiprod(c, logm), multitransp(c))
def log(self, x, y): c = la.cholesky(x) c_inv = la.inv(c) l = multilog(multiprod(multiprod(c_inv, y), multitransp(c_inv)), pos_def=True) return multiprod(multiprod(c, l), multitransp(c))
def test_multilog_singlemat(self): a = np.diag(rnd.rand(self.m)) q, r = la.qr(rnd.randn(self.m, self.m)) # A is a positive definite matrix A = q.dot(a.dot(q.T)) np_testing.assert_allclose(multilog(A, pos_def=True), logm(A))