Ejemplo n.º 1
0
 def add(self, X, Y=None):
     # check input
     T = X.shape[0]
     if Y is not None:
         assert Y.shape[0] == T, 'X and Y must have equal length'
     # estimate and add to storage
     if self.compute_XX and not self.compute_XY:
         w, s_X, C_XX = moments_XX(X, remove_mean=self.remove_mean,
                                   sparse_mode=self.sparse_mode, modify_data=self.modify_data)
         self.storage_XX.store(Moments(w, s_X, s_X, C_XX))
     elif self.compute_XX and self.compute_XY:
         assert Y is not None
         w, s_X, s_Y, C_XX, C_XY = moments_XXXY(X, Y, remove_mean=self.remove_mean, symmetrize=self.symmetrize,
                                                sparse_mode=self.sparse_mode, modify_data=self.modify_data)
         # make copy in order to get independently mergeable moments
         self.storage_XX.store(Moments(w, s_X, s_X, C_XX))
         self.storage_XY.store(Moments(w, s_X, s_Y, C_XY))
     else:  # compute block
         assert Y is not None
         assert not self.symmetrize
         w, s, C = moments_block(X, Y, remove_mean=self.remove_mean,
                                 sparse_mode=self.sparse_mode, modify_data=self.modify_data)
         # make copy in order to get independently mergeable moments
         self.storage_XX.store(Moments(w, s[0], s[0], C[0, 0]))
         self.storage_XY.store(Moments(w, s[0], s[1], C[0, 1]))
         self.storage_YY.store(Moments(w, s[1], s[1], C[1, 1]))
Ejemplo n.º 2
0
def mytime_momentsXX(X, remove_mean=False, nrep=3):
    # time for reference calculation
    t1 = time.time()
    for r in range(nrep):
        w, s, C_XX = moments.moments_XX(X, remove_mean=remove_mean)
    t2 = time.time()
    # return mean time
    return (t2-t1)/float(nrep)
Ejemplo n.º 3
0
 def _test_moments_X(self, X, remove_mean=False, sparse_mode='auto'):
     # proposed solution
     w, s_X, C_XX = moments.moments_XX(X, remove_mean=remove_mean, modify_data=False,
                                       sparse_mode=sparse_mode)
     # reference
     X = X.astype(np.float64)
     s_X_ref = X.sum(axis=0)
     if remove_mean:
         X = X - X.mean(axis=0)
     C_XX_ref = np.dot(X.T, X)
     # test
     assert np.allclose(s_X, s_X_ref)
     assert np.allclose(C_XX, C_XX_ref)
Ejemplo n.º 4
0
 def test_boolean_moments(self):
     # standard tests
     self._test_moments_X(self.Xb_10, remove_mean=False, sparse_mode='dense')
     self._test_moments_X(self.Xb_10, remove_mean=True, sparse_mode='dense')
     self._test_moments_X(self.Xb_10_sparsezero, remove_mean=False, sparse_mode='sparse')
     self._test_moments_X(self.Xb_10_sparsezero, remove_mean=True, sparse_mode='sparse')
     # test integer recovery
     Cxx_ref = np.dot(self.Xb_10.astype(np.int64).T, self.Xb_10.astype(np.int64))  # integer
     s_X_ref = np.sum(self.Xb_10, axis=0)
     w, s_X, Cxx = moments.moments_XX(self.Xb_10, remove_mean=False, modify_data=False, sparse_mode='dense')
     s_X = np.round(s_X).astype(np.int64)
     Cxx = np.round(Cxx).astype(np.int64)
     assert np.array_equal(s_X, s_X_ref)
     assert np.array_equal(Cxx, Cxx_ref)