BenchSparseUtil.h
Go to the documentation of this file.
00001 
00002 #include <Eigen/Sparse>
00003 #include <bench/BenchTimer.h>
00004 #include <set>
00005 
00006 using namespace std;
00007 using namespace Eigen;
00008 using namespace Eigen;
00009 
00010 #ifndef SIZE
00011 #define SIZE 1024
00012 #endif
00013 
00014 #ifndef DENSITY
00015 #define DENSITY 0.01
00016 #endif
00017 
00018 #ifndef SCALAR
00019 #define SCALAR double
00020 #endif
00021 
00022 typedef SCALAR Scalar;
00023 typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix;
00024 typedef Matrix<Scalar,Dynamic,1> DenseVector;
00025 typedef SparseMatrix<Scalar> EigenSparseMatrix;
00026 
00027 void fillMatrix(float density, int rows, int cols,  EigenSparseMatrix& dst)
00028 {
00029   dst.reserve(rows*cols*density);
00030   for(int j = 0; j < cols; j++)
00031   {
00032     for(int i = 0; i < rows; i++)
00033     {
00034       Scalar v = (internal::random<float>(0,1) < density) ? internal::random<Scalar>() : 0;
00035       if (v!=0)
00036         dst.insert(i,j) = v;
00037     }
00038   }
00039   dst.finalize();
00040 }
00041 
00042 void fillMatrix2(int nnzPerCol, int rows, int cols,  EigenSparseMatrix& dst)
00043 {
00044 //   std::cout << "alloc " << nnzPerCol*cols << "\n";
00045   dst.reserve(nnzPerCol*cols);
00046   for(int j = 0; j < cols; j++)
00047   {
00048     std::set<int> aux;
00049     for(int i = 0; i < nnzPerCol; i++)
00050     {
00051       int k = internal::random<int>(0,rows-1);
00052       while (aux.find(k)!=aux.end())
00053         k = internal::random<int>(0,rows-1);
00054       aux.insert(k);
00055 
00056       dst.insert(k,j) = internal::random<Scalar>();
00057     }
00058   }
00059   dst.finalize();
00060 }
00061 
00062 void eiToDense(const EigenSparseMatrix& src, DenseMatrix& dst)
00063 {
00064   dst.setZero();
00065   for (int j=0; j<src.cols(); ++j)
00066     for (EigenSparseMatrix::InnerIterator it(src.derived(), j); it; ++it)
00067       dst(it.index(),j) = it.value();
00068 }
00069 
00070 #ifndef NOGMM
00071 #include "gmm/gmm.h"
00072 typedef gmm::csc_matrix<Scalar> GmmSparse;
00073 typedef gmm::col_matrix< gmm::wsvector<Scalar> > GmmDynSparse;
00074 void eiToGmm(const EigenSparseMatrix& src, GmmSparse& dst)
00075 {
00076   GmmDynSparse tmp(src.rows(), src.cols());
00077   for (int j=0; j<src.cols(); ++j)
00078     for (EigenSparseMatrix::InnerIterator it(src.derived(), j); it; ++it)
00079       tmp(it.index(),j) = it.value();
00080   gmm::copy(tmp, dst);
00081 }
00082 #endif
00083 
00084 #ifndef NOMTL
00085 #include <boost/numeric/mtl/mtl.hpp>
00086 typedef mtl::compressed2D<Scalar, mtl::matrix::parameters<mtl::tag::col_major> > MtlSparse;
00087 typedef mtl::compressed2D<Scalar, mtl::matrix::parameters<mtl::tag::row_major> > MtlSparseRowMajor;
00088 void eiToMtl(const EigenSparseMatrix& src, MtlSparse& dst)
00089 {
00090   mtl::matrix::inserter<MtlSparse> ins(dst);
00091   for (int j=0; j<src.cols(); ++j)
00092     for (EigenSparseMatrix::InnerIterator it(src.derived(), j); it; ++it)
00093       ins[it.index()][j] = it.value();
00094 }
00095 #endif
00096 
00097 #ifdef CSPARSE
00098 extern "C" {
00099 #include "cs.h"
00100 }
00101 void eiToCSparse(const EigenSparseMatrix& src, cs* &dst)
00102 {
00103   cs* aux = cs_spalloc (0, 0, 1, 1, 1);
00104   for (int j=0; j<src.cols(); ++j)
00105     for (EigenSparseMatrix::InnerIterator it(src.derived(), j); it; ++it)
00106       if (!cs_entry(aux, it.index(), j, it.value()))
00107       {
00108         std::cout << "cs_entry error\n";
00109         exit(2);
00110       }
00111    dst = cs_compress(aux);
00112 //    cs_spfree(aux);
00113 }
00114 #endif // CSPARSE
00115 
00116 #ifndef NOUBLAS
00117 #include <boost/numeric/ublas/vector.hpp>
00118 #include <boost/numeric/ublas/matrix.hpp>
00119 #include <boost/numeric/ublas/io.hpp>
00120 #include <boost/numeric/ublas/triangular.hpp>
00121 #include <boost/numeric/ublas/vector_sparse.hpp>
00122 #include <boost/numeric/ublas/matrix_sparse.hpp>
00123 #include <boost/numeric/ublas/vector_of_vector.hpp>
00124 #include <boost/numeric/ublas/operation.hpp>
00125 // #include <boost/numeric/ublas/sparse_prod.hpp>
00126 
00127 // using namespace boost;
00128 // using namespace boost::numeric;
00129 // using namespace boost::numeric::ublas;
00130 
00131 typedef boost::numeric::ublas::compressed_matrix<Scalar,boost::numeric::ublas::column_major> UblasMatrix;
00132 
00133 void eiToUblas(const EigenSparseMatrix& src, UblasMatrix& dst)
00134 {
00135   for (int j=0; j<src.cols(); ++j)
00136     for (EigenSparseMatrix::InnerIterator it(src.derived(), j); it; ++it)
00137       dst(it.index(),j) = it.value();
00138 }
00139 
00140 
00141 #endif
00142 
00143 #ifdef OSKI
00144 extern "C" {
00145 #include <oski/oski.h>
00146 }
00147 #endif


libicr
Author(s): Robert Krug
autogenerated on Mon Jan 6 2014 11:32:30