1 #ifndef VIENNACL_LINALG_PROD_HPP_
2 #define VIENNACL_LINALG_PROD_HPP_
42 #ifdef VIENNACL_HAVE_MTL4
46 template<
typename MatrixT,
typename VectorT >
48 prod(MatrixT
const& matrix, VectorT
const& vector,
53 return VectorT(matrix * vector);
57 #ifdef VIENNACL_HAVE_EIGEN
61 template<
typename MatrixT,
typename VectorT >
63 prod(MatrixT
const& matrix, VectorT
const& vector,
68 return matrix * vector;
72 #ifdef VIENNACL_HAVE_UBLAS
76 template<
typename MatrixT,
typename VectorT >
78 prod(MatrixT
const& matrix, VectorT
const& vector,
93 template<
typename T,
typename A1,
typename A2,
typename VectorT >
97 VectorT result(
matrix.size());
98 for (
typename std::vector<T, A1>::size_type i=0; i<
matrix.size(); ++i)
101 for (
typename std::vector<T, A1>::size_type j=0; j<
matrix[i].size(); ++j)
102 result[i] +=
matrix[i][j] * vector[j];
108 template<
typename KEY,
typename DATA,
typename COMPARE,
typename AMAP,
typename AVEC,
typename VectorT >
112 typedef std::vector< std::map<KEY, DATA, COMPARE, AMAP>, AVEC > MatrixType;
114 VectorT result(
matrix.size());
115 for (
typename MatrixType::size_type i=0; i<
matrix.size(); ++i)
118 for (
typename std::map<KEY, DATA, COMPARE, AMAP>::const_iterator row_entries =
matrix[i].begin();
119 row_entries !=
matrix[i].end();
121 result[i] += row_entries->second * vector[row_entries->first];
127 template<
typename MatrixT,
typename VectorT >
140 template<
typename MatrixT1,
typename MatrixT2 >
152 viennacl::op_prod >(A, B);
156 template<
typename MatrixT1,
typename MatrixT2 >
174 viennacl::op_prod >(A, B);
183 template<
typename MatrixT,
typename NumericT,
unsigned int ALIGNMENT >
196 template<
typename MatrixT,
typename NumericT,
typename F,
unsigned int ALIGNMENT >
208 viennacl::op_prod >(matrix_A, matrix_B);
211 template<
typename MatrixT,
typename NumericT,
typename F,
unsigned int ALIGNMENT >
215 viennacl::op_trans >,
220 viennacl::op_trans > & matrix_B,
228 viennacl::op_trans >,
229 viennacl::op_prod >(matrix_A, matrix_B);