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 :
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
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
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Assertion failed in file /usr/include/boost/numeric/ublas/matrix_proxy.hpp at line 970: size1 == size2
À bientôt.
Le Farfadet Spatial
Partager