Bonjour à tous !

Je cherche à accéder à un sous-vecteur d'une matrice en utilisant uBlas de Boost et je ne m'en sors pas avec les matrix_vector_range. Pour montrer mon problème, prenons un exemple simple :

Soit la matrice suivante :

| 0 1 2 |
| 3 4 5 | = M
| 6 7 8 |

Je cherche à obtenir le sous-vecteur de la deuxième colonne, de la ligne 2 à la ligne 3, c'est-à-dire :

v = (4 ; 7)

Il me semble que ce qui est approprié pour ce faire est la structure matrix_vector_range. J'ai donc fait le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
 
int main (int argc, char **argv) {
  using namespace boost::numeric::ublas;
 
  matrix<double> M (3, 3);
  for (unsigned i = 0; i < M.size1(); ++i)
    for (unsigned j = 0; j < M.size2(); ++ j)
      M(i, j) = 3 * i + j;
 
  matrix_vector_range<matrix<double> > v (M, range (1, 3), range (1, 1));
  std::cout << v << std::endl;
 
  return 0;
}  // main
Tout compile sans problème. Par contre, j'obtiens le résultat suivant à l'exécution :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Assertion failed in file /usr/include/boost/numeric/ublas/matrix_proxy.hpp at line 970:
size1 == size2
Donc, visiblement, je m'emmêle les pinceaux dans l'utilisation de range. Le seul truc, c'est que je n'arrive pas à comprendre comment je devrais m'y prendre normalement. Est-ce que quelqu'un à une idée ?

À bientôt.

Le Farfadet Spatial