Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1898 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [boost::numeric::ublas] outer_prod et matrix2vector

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[boost::numeric::ublas] outer_prod et matrix2vector

n°2048512
Lan Wezel
Posté le 12-01-2011 à 18:00:08  profilanswer
 

Bonjour,
 
Je me suis mis à boost::numeric::ublas pour mes calculs matriciels et j'ai quelques petits soucis.
J'utilise des vector et matrix de boost::numeric::ublas pour mes calculs. Plus précisemment leurs versions sparses (coordinate_matrix, coordinate_vector).
J'ai deux vecteurs de doubles de tailles n~1000 et p~1000 (très sparses) et je voudrais obtenir leur outer product à plat (dans un vecteur de taille n*p).
 
J'ai donc pensé à utiliser faire ceci :
 

Code :
  1. template<class T_M, class T_V>
  2.   void matrixToVector(const T_M& m, T_V& v){
  3.     assert(m.size1() * m.size2() == v.size() );
  4.     typename T_M::const_iterator1 first1 = m.begin1(), last1 = m.end1(), first2, last2;
  5.     for(typename T_M::const_iterator1 iM1 = first1; iM1 != last1; iM1++){
  6.       first2 = iM1.begin();
  7.       last2 = iM1.end();
  8.       for(typename T_M::const_iterator2 iM2 = first2; iM2 != last2; iM2++){
  9. v(iM2.index1()*m.size2() + iM2.index2()) = (*iM2);
  10.       }
  11.     }
  12.   }


 
afin de faire  
 

Code :
  1. boost::numeric::ublas::coordinate_vector a(n), b(p), r(n*p);
  2. boost::numeric::ublas::coordinate_matrix<double> tmp = outer_prod(a,b);
  3. matrix2vector(tmp, r);


 
J'obtiens ainsi dans "r" la version à plat de l'outer product.
 
Mon seul problème est que cette solution n'est ni élégante ni efficace (c'est surtout le second qui m'importe). En effet, l'appel à iM1.begin() fait un find2() qui est une recherche dichotomique (lower_bound). Cela me pose énormément de problèmes d'efficacité. Y-aurait-il une autre manière de réaliser cela (outer product à plat) de manière plus efficace ?

mood
Publicité
Posté le 12-01-2011 à 18:00:08  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [boost::numeric::ublas] outer_prod et matrix2vector

 

Sujets relatifs
[Boost::Asio] Arrive pas a se connecter a un serveur sous boost[Solved] boost::unique_lock sur un shared_lock
[résolu] boost::ublas::vector_sparse[boost.serialization] Sérialization, templates et pointeurs
Boost et mutexBoost lambda et objet complexe
[boost] Parsing de fichiers simples mais très gros[boost::serialization] Serialization de classes "inconnues"
Boost.preprocessorBOOST_PP : concatener un caractère spécial
Plus de sujets relatifs à : [boost::numeric::ublas] outer_prod et matrix2vector


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR