Exemple #1
0
void bi::cov(const ExpGaussianPdf<V1, M1>& q, M2 Sigma) {
  /* pre-condition */
  BI_ASSERT(Sigma.size1() == q.size());
  BI_ASSERT(Sigma.size2() == q.size());

  Sigma = q.cov();
}
Exemple #2
0
Common_type<Value_type<M1>, Value_type<M2> >
dot_product (const M1 &a, const M2 &b)
{
  static_assert (a.order == 1, "");
  static_assert (b.order == 1, "");
  assert (a.size () == b.size ());
  return inner_product (a.begin (), a.end (), b.begin (), size_t (0));
}
Exemple #3
0
void checkMatrixEqual(M1 const& m1, M2 const& m2){
	BOOST_REQUIRE_EQUAL(m1.size1(),m2.size1());
	BOOST_REQUIRE_EQUAL(m1.size2(),m2.size2());
	for(std::size_t i = 0; i != m2.size1(); ++i){
		for(std::size_t j = 0; j != m2.size2(); ++j){
			BOOST_CHECK_EQUAL(m1(i,j),m2(i,j));
		}
	}
}
Exemple #4
0
void bi::cov(const M1 X, const V1 mu, M2 Sigma) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(Sigma.size1() == mu.size() && Sigma.size2() == mu.size());

  const int N = X.size1();
  typename sim_temp_matrix<M2>::type Y(X.size1(), X.size2());
  Y = X;
  sub_rows(Y, mu);
  syrk(1.0/(N - 1.0), Y, 0.0, Sigma, 'U', 'T');
}
Exemple #5
0
void bi::cross(const M1 X, const M2 Y, const V1 muX, const V2 muY,
    M3 SigmaXY) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == muX.size());
  BI_ASSERT(Y.size2() == muY.size());
  BI_ASSERT(X.size1() == Y.size1());
  BI_ASSERT(SigmaXY.size1() == muX.size() && SigmaXY.size2() == muY.size());

  const int N = X.size1();

  gemm(1.0/(N - 1.0), X, Y, 0.0, SigmaXY, 'T', 'N');
  ger(-N/(N - 1.0), muX, muY, SigmaXY);
}
Exemple #6
0
    void expectNear(const M1 & A, const M2 & B, T tolerance, std::string const & message = "")
    {
      EXPECT_EQ((size_t)A.rows(),(size_t)B.rows()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";
      EXPECT_EQ((size_t)A.cols(),(size_t)B.cols()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";

      for(int r = 0; r < A.rows(); r++)
        {
          for(int c = 0; c < A.cols(); c++)
            {
              EXPECT_NEAR(A(r,c),B(r,c),tolerance) << message << "\nTolerance comparison failed at (" << r << "," << c << ")\n"
												   << "\nMatrix A:\n" << A << "\nand matrix B\n" << B;
            }
        }
    }
Exemple #7
0
    void assertEqual(const M1 & A, const M2 & B, std::string const & message = "")
    {
        ASSERT_EQ((size_t)A.rows(),(size_t)B.rows()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";
      ASSERT_EQ((size_t)A.cols(),(size_t)B.cols()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";

      for(int r = 0; r < A.rows(); r++)
		{
		  for(int c = 0; c < A.cols(); c++)
			{
			  ASSERT_EQ(A(r,c),B(r,c)) << message << "\nEquality comparison failed at (" << r << "," << c << ")\n"
                                       << "\nMatrix A:\n" << A << "\nand matrix B\n" << B; 
			}
		}
    }
Exemple #8
0
void bi::standardise(const ExpGaussianPdf<V1,M1>& p, M2 X) {
  /* pre-condition */
  BI_ASSERT(p.size() == X.size2());

  typename sim_temp_vector<M2>::type mu(X.size2());

  log_columns(X, p.getLogs());
  mean(X, mu);
  sub_rows(X, mu);
  trsm(1.0, p.std(), X, 'R', 'U');
  add_rows(X, mu);
  sub_rows(X, p.mean());
  exp_columns(X, p.getLogs());
}
Exemple #9
0
bool compare_result(const M1& sm, const M2& m)
{
   if(sm.size() != m.size())
      return false;
   if(sm.line() != m.line())
      return false;
   for(unsigned int i = 0; i < sm.size(); ++i)
   {
      if(sm.position(i) != m.position(i))
         return false;
      if(sm.length(i) != m.length(i))
         return false;
   }
   return true;
}
Exemple #10
0
void check_LU_res(const M1 & m, const M2& lu)
{
    GeneralMatrix l(m.M(), m.N());
    GeneralMatrix u(m.M(), m.N());
    for(int i = 0; i < lu.M(); i++)
    {
        for(int j = 0; j< lu.N(); j++)
        {
            if(i>j)
            {
                l(i, j) = lu(i, j);
                u(i, j) = 0;
            }
            else if(i == j)
            {
                l(i, j) = 1;
                u(i, j) = lu(i, j);
            }
            else
            {
                l(i, j) = 0;
                u(i, j) = lu(i, j);
            }
        }
    }

    bool equal = true;
    GeneralMatrix m1(m.M(), m.N());
    mul(l, u, m1);
    for(int i = 0; i<m.M(); i++)
        for(int j = 0; j< m.N(); j++)
        {
            if(std::abs(m1(i, j) - m(i, j) ) / m(i, j) > 0.1)
            {
                equal = false;
            }
        }
    if(!check_Matrix(m1,m))
    {
        std::cout<<"wrong answer!"<<std::endl;
    }
    else
    {
        std::cout<<"right answer, wahahahaha!"<<std::endl;
    }
}
Exemple #11
0
    void assertNear(const M1 & A, const M2 & B, T tolerance, std::string const & message = "")
    {
      // Note: If these assertions fail, they only abort this subroutine.
      // see: http://code.google.com/p/googletest/wiki/AdvancedGuide#Using_Assertions_in_Sub-routines
      // \todo better handling of this
        ASSERT_EQ((size_t)A.rows(),(size_t)B.rows()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";
      ASSERT_EQ((size_t)A.cols(),(size_t)B.cols()) << message << "\nMatrix A:\n" << A << "\nand matrix B\n" << B << "\nare not the same\n";

      for(int r = 0; r < A.rows(); r++)
		{
		  for(int c = 0; c < A.cols(); c++)
			{
			  ASSERT_NEAR(A(r,c),B(r,c),tolerance) << message << "\nTolerance comparison failed at (" << r << "," << c << ")\n"
												   << "\nMatrix A:\n" << A << "\nand matrix B\n" << B; 
			}
		}
    }
Exemple #12
0
void bi::cov(const M1 X, const V1 w, const V2 mu, M2 Sigma) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == mu.size());
  BI_ASSERT(X.size1() == w.size());
  BI_ASSERT(Sigma.size1() == mu.size() && Sigma.size2() == mu.size());

  typedef typename V1::value_type T;
  typename sim_temp_matrix<M2>::type Y(X.size1(), X.size2());
  typename sim_temp_matrix<M2>::type Z(X.size1(), X.size2());
  typename sim_temp_vector<V2>::type v(w.size());

  T Wt = sum_reduce(w);
  Y = X;
  sub_rows(Y, mu);
  sqrt_elements(w, v);
  gdmm(1.0, v, Y, 0.0, Z);
  syrk(1.0/Wt, Z, 0.0, Sigma, 'U', 'T');
  // alternative weight: 1.0/(Wt - W2t/Wt)
}
Exemple #13
0
void bi::distance(const M1 X, const real h, M2 D) {
  /* pre-conditions */
  BI_ASSERT(D.size1() == D.size2());
  BI_ASSERT(D.size1() == X.size1());
  BI_ASSERT(!M2::on_device);

  typedef typename M1::value_type T1;

  FastGaussianKernel K(X.size2(), h);
  typename temp_host_vector<T1>::type d(X.size2());
  int i, j;
  for (j = 0; j < D.size2(); ++j) {
    for (i = 0; i <= j; ++i) {
      d = row(X, i);
      axpy(-1.0, row(X, j), d);
      D(i, j) = K(dot(d));
    }
  }
}
Exemple #14
0
void checkDenseMatrixEqual(M1 const& m1, M2 const& m2){
	BOOST_REQUIRE_EQUAL(m1.size1(),m2.size1());
	BOOST_REQUIRE_EQUAL(m1.size2(),m2.size2());
	//indexed access
	for(std::size_t i = 0; i != m2.size1(); ++i){
		for(std::size_t j = 0; j != m2.size2(); ++j){
			BOOST_CHECK_EQUAL(m1(i,j),m2(i,j));
		}
	}
	//iterator access rows
	for(std::size_t i = 0; i != m2.size1(); ++i){
		typedef typename M1::const_row_iterator Iter;
		BOOST_REQUIRE_EQUAL(m1.row_end(i)-m1.row_begin(i), m1.size2());
		std::size_t k = 0;
		for(Iter it = m1.row_begin(i); it != m1.row_end(i); ++it,++k){
			BOOST_CHECK_EQUAL(k,it.index());
			BOOST_CHECK_EQUAL(*it,m2(i,k));
		}
		//test that the actual iterated length equals the number of elements
		BOOST_CHECK_EQUAL(k, m1.size2());
	}
	//iterator access columns
	for(std::size_t i = 0; i != m2.size2(); ++i){
		typedef typename M1::const_column_iterator Iter;
		BOOST_REQUIRE_EQUAL(m1.column_end(i)-m1.column_begin(i), m1.size1());
		std::size_t k = 0;
		for(Iter it = m1.column_begin(i); it != m1.column_end(i); ++it,++k){
			BOOST_CHECK_EQUAL(k,it.index());
			BOOST_CHECK_EQUAL(*it,m2(k,i));
		}
		//test that the actual iterated length equals the number of elements
		BOOST_CHECK_EQUAL(k, m1.size1());
	}
}
Exemple #15
0
void bi::cross(const M1 X, const M2 Y, const V1 w, const V2 muX,
    const V3 muY, M3 SigmaXY) {
  /* pre-conditions */
  BI_ASSERT(X.size2() == muX.size());
  BI_ASSERT(Y.size2() == muY.size());
  BI_ASSERT(X.size1() == Y.size1());
  BI_ASSERT(X.size1() == w.size());
  BI_ASSERT(Y.size1() == w.size());
  BI_ASSERT(SigmaXY.size1() == muX.size() && SigmaXY.size2() == muY.size());

  typedef typename V1::value_type T;
  typename sim_temp_matrix<M3>::type Z(X.size1(), X.size2());

  T Wt = sum_reduce(w);
  T Wt2 = std::pow(Wt, 2);
  T W2t = sumsq_reduce(w);

  gdmm(1.0, w, X, 0.0, Z);
  gemm(1.0/Wt, Z, Y, 0.0, SigmaXY, 'T', 'N');
  ger(-1.0, muX, muY, SigmaXY);
  matrix_scal(1.0/(1.0 - W2t/Wt2), SigmaXY);
}
Exemple #16
0
 static constexpr auto equal_impl(M1 m1, M2 m2) {
     return m1.nrows() == m2.nrows() &&
            m1.ncolumns() == m2.ncolumns() &&
            all_of(zip_with(_==_, m1.rows_, m2.rows_));
 }