#include #include #include #include #include #include #include #include #include #include #include #include #include int main(int argc, char** argv) { { // a * b' = C ; a' * b = d boost::numeric::ublas::vector a(3); for (std::size_t i = 0; i < a.size(); ++i) a(i) = i; std::cout << "a=" << a << std::endl; boost::numeric::ublas::vector b(3); for (std::size_t i = 0; i < b.size(); ++i) b(i) = i; std::cout << "b=" << b << std::endl; boost::numeric::ublas::matrix c(3, 3); boost::numeric::bindings::blas::gemm( boost::numeric::bindings::traits::NO_TRANSPOSE, boost::numeric::bindings::traits::TRANSPOSE, 1.0, a, b, 0.0, c ); std::cout << "c=" << c << std::endl; boost::numeric::ublas::vector d(1); boost::numeric::bindings::blas::gemm( boost::numeric::bindings::traits::TRANSPOSE, boost::numeric::bindings::traits::NO_TRANSPOSE, 1.0, a, b, 0.0, d ); std::cout << "d=" << d << std::endl; } std::cout << std::endl; { // a * b' = C ; a' * b = d std::vector a(3); for (std::size_t i = 0; i < a.size(); ++i) a[i] = i; std::cout << "a=[" << a.size() << "]("; for (std::size_t i = 0; i < a.size(); ++i) std::cout << (i > 0 ? "," : "") << a[i]; std::cout << ")" << std::endl; std::valarray b(3); for (std::size_t i = 0; i < b.size(); ++i) b[i] = i; std::cout << "b=[" << b.size() << "]("; for (std::size_t i = 0; i < b.size(); ++i) std::cout << (i > 0 ? "," : "") << b[i]; std::cout << ")" << std::endl; boost::numeric::ublas::matrix c(3, 3); boost::numeric::bindings::blas::gemm( boost::numeric::bindings::traits::NO_TRANSPOSE, boost::numeric::bindings::traits::TRANSPOSE, 1.0, a, b, 0.0, c ); std::cout << "c=" << c << std::endl; std::vector d(1); boost::numeric::bindings::blas::gemm( boost::numeric::bindings::traits::TRANSPOSE, boost::numeric::bindings::traits::NO_TRANSPOSE, 1.0, a, b, 0.0, d ); std::cout << "d=[" << d.size() << "]("; for (std::size_t i = 0; i < d.size(); ++i) std::cout << (i > 0 ? "," : "") << d[i]; std::cout << ")" << std::endl; } std::cout << std::endl; { // a * b' = C ; a' * b = d double a[3]; for (std::size_t i = 0; i < 3; ++i) a[i] = i; std::cout << "a=[" << 3 << "]("; for (std::size_t i = 0; i < 3; ++i) std::cout << (i > 0 ? "," : "") << a[i]; std::cout << ")" << std::endl; std::vector b(3); for (std::size_t i = 0; i < b.size(); ++i) b[i] = i; std::cout << "b=[" << b.size() << "]("; for (std::size_t i = 0; i < b.size(); ++i) std::cout << (i > 0 ? "," : "") << b[i]; std::cout << ")" << std::endl; boost::numeric::ublas::matrix c(3, 3); boost::numeric::bindings::blas::gemm( boost::numeric::bindings::traits::NO_TRANSPOSE, boost::numeric::bindings::traits::TRANSPOSE, 1.0, a, b, 0.0, c ); std::cout << "c=" << c << std::endl; std::valarray d(1); boost::numeric::bindings::blas::gemm( boost::numeric::bindings::traits::TRANSPOSE, boost::numeric::bindings::traits::NO_TRANSPOSE, 1.0, a, b, 0.0, d ); std::cout << "d=[" << d.size() << "]("; for (std::size_t i = 0; i < d.size(); ++i) std::cout << (i > 0 ? "," : "") << d[i]; std::cout << ")" << std::endl; } return 0; }