Boost.uBlas et sous-vecteur de matrice
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:
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:
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