 Matrix Proxies
Matrix ProxiesThe templated class matrix_row<M> allows
addressing a row of a matrix.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    for (unsigned i = 0; i < m.size1 (); ++ i) {
        matrix_row<matrix<double> > mr (m, i);
        for (unsigned j = 0; j < mr.size (); ++ j)
            mr (j) = 3 * i + j;
        std::cout << mr << std::endl;
    }
}
Defined in the header matrix_proxy.hpp.
| Parameter | Description | Default | 
|---|---|---|
| M | The type of matrix referenced. | 
If the specified row falls outside that of the row index range
of the matrix, then the matrix_row is not a well
formed Vector Expression. That is, access to an element which is
outside of the matrix is undefined.
None, except for those imposed by the requirements of Vector Expression .
vector_expression<matrix_row<M> >
| Member | Description | 
|---|---|
| matrix_row (matrix_type &data, size_type
i) | Constructs a sub vector. | 
| size_type size () const | Returns the size of the sub vector. | 
| const_reference operator () (size_type i)
const | Returns the value of the i-th element. | 
| reference operator () (size_type i) | Returns a reference of the i-th element. | 
| matrix_row &operator = (const matrix_row
&mr) | The assignment operator. | 
| matrix_row &assign_temporary (matrix_row
&mr) | Assigns a temporary. May change the matrix row mr. | 
| template<class AE> | The extended assignment operator. | 
| template<class AE> | Assigns a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Adds the vector expression to the sub vector. | 
| template<class AE> | Adds a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Subtracts the vector expression from the sub vector. | 
| template<class AE> | Subtracts a vector expression from the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AT> | A computed assignment operator. Multiplies the sub vector with a scalar. | 
| template<class AT> | A computed assignment operator. Divides the sub vector through a scalar. | 
| void swap (matrix_row &mr) | Swaps the contents of the sub vectors. | 
| const_iterator begin () const | Returns a const_iteratorpointing to the beginning
of thematrix_row. | 
| const_iterator end () const | Returns a const_iteratorpointing to the end of
thematrix_row. | 
| iterator begin () | Returns a iteratorpointing to the beginning of
thematrix_row. | 
| iterator end () | Returns a iteratorpointing to the end of thematrix_row. | 
| const_reverse_iterator rbegin () const | Returns a const_reverse_iteratorpointing to the
beginning of the reversedmatrix_row. | 
| const_reverse_iterator rend () const | Returns a const_reverse_iteratorpointing to the
end of the reversedmatrix_row. | 
| reverse_iterator rbegin () | Returns a reverse_iteratorpointing to the
beginning of the reversedmatrix_row. | 
| reverse_iterator rend () | Returns a reverse_iteratorpointing to the end of
the reversedmatrix_row. | 
The free row functions support the construction of
matrix rows.
    template<class M>
    matrix_row<M> row (M &data, std::size_t i);
    template<class M>
    const matrix_row<const M> row (const M &data, std::size_t i);
Defined in the header matrix_proxy.hpp.
M is a model of Matrix Expression .Linear depending from the size of the row.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    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)
            row (m, i) (j) = 3 * i + j;
        std::cout << row (m, i) << std::endl;
    }
}
The templated class matrix_column<M> allows
addressing a column of a matrix.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    for (unsigned j = 0; j < m.size2 (); ++ j) {
        matrix_column<matrix<double> > mc (m, j);
        for (unsigned i = 0; i < mc.size (); ++ i)
            mc (i) = 3 * i + j;
        std::cout << mc << std::endl;
    }
}
Defined in the header matrix_proxy.hpp.
| Parameter | Description | Default | 
|---|---|---|
| M | The type of matrix referenced. | 
If the specified column falls outside that of the column index
range of the matrix, then the matrix_column is not a
well formed Vector Expression. That is, access to an element which
is outside of the matrix is undefined.
None, except for those imposed by the requirements of Vector Expression .
vector_expression<matrix_column<M>
>
| Member | Description | 
|---|---|
| matrix_column (matrix_type &data, size_type
j) | Constructs a sub vector. | 
| size_type size () const | Returns the size of the sub vector. | 
| const_reference operator () (size_type i)
const | Returns the value of the i-th element. | 
| reference operator () (size_type i) | Returns a reference of the i-th element. | 
| matrix_column &operator = (const matrix_column
&mc) | The assignment operator. | 
| matrix_column &assign_temporary (matrix_column
&mc) | Assigns a temporary. May change the matrix column mc. | 
| template<class AE> | The extended assignment operator. | 
| template<class AE> | Assigns a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Adds the vector expression to the sub vector. | 
| template<class AE> | Adds a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Subtracts the vector expression from the sub vector. | 
| template<class AE> | Subtracts a vector expression from the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AT> | A computed assignment operator. Multiplies the sub vector with a scalar. | 
| template<class AT> | A computed assignment operator. Divides the sub vector through a scalar. | 
| void swap (matrix_column &mc) | Swaps the contents of the sub vectors. | 
| const_iterator begin () const | Returns a const_iteratorpointing to the beginning
of thematrix_column. | 
| const_iterator end () const | Returns a const_iteratorpointing to the end of
thematrix_column. | 
| iterator begin () | Returns a iteratorpointing to the beginning of
thematrix_column. | 
| iterator end () | Returns a iteratorpointing to the end of thematrix_column. | 
| const_reverse_iterator rbegin () const | Returns a const_reverse_iteratorpointing to the
beginning of the reversedmatrix_column. | 
| const_reverse_iterator rend () const | Returns a const_reverse_iteratorpointing to the
end of the reversedmatrix_column. | 
| reverse_iterator rbegin () | Returns a reverse_iteratorpointing to the
beginning of the reversedmatrix_column. | 
| reverse_iterator rend () | Returns a reverse_iteratorpointing to the end of
the reversedmatrix_column. | 
The free column functions support the construction
of matrix columns.
    template<class M>
    matrix_column<M> column (M &data, std::size_t j);
    template<class M>
    const matrix_column<const M> column (const M &data, std::size_t j);
Defined in the header matrix_proxy.hpp.
M is a model of Matrix Expression .Linear depending from the size of the column.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    for (unsigned j = 0; j < m.size2 (); ++ j) {
        for (unsigned i = 0; i < m.size1 (); ++ i)
            column (m, j) (i) = 3 * i + j;
        std::cout << column (m, j) << std::endl;
    }
}
The templated class matrix_vector_range<M>
allows addressing a sub vector of a matrix.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    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> > mvr (m, range (0, 3), range (0, 3));
    std::cout << mvr << std::endl;
}
Defined in the header matrix_proxy.hpp.
| Parameter | Description | Default | 
|---|---|---|
| M | The type of matrix referenced. | 
If the specified ranges fall outside that of the index range of
the matrix, then the matrix_vector_range is not a well
formed Vector Expression. That is, access to an element which is
outside of the matrix is undefined.
None, except for those imposed by the requirements of Vector Expression .
vector_expression<matrix_vector_range<M>
>
| Member | Description | 
|---|---|
| matrix_vector_range (matrix_type &data, | Constructs a sub vector. | 
| size_type size () const | Returns the size of the sub vector. | 
| const_reference operator () (size_type i)
const | Returns the value of the i-th element. | 
| reference operator () (size_type i) | Returns a reference of the i-th element. | 
| matrix_vector_range &operator = (const
matrix_vector_range &mvr) | The assignment operator. | 
| matrix_vector_range &assign_temporary
(matrix_vector_range &mvr) | Assigns a temporary. May change the matrix vector range mvr. | 
| template<class AE> | The extended assignment operator. | 
| template<class AE> | Assigns a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Adds the vector expression to the sub vector. | 
| template<class AE> | Adds a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Subtracts the vector expression from the sub vector. | 
| template<class AE> | Subtracts a vector expression from the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AT> | A computed assignment operator. Multiplies the sub vector with a scalar. | 
| template<class AT> | A computed assignment operator. Divides the sub vector through a scalar. | 
| void swap (matrix_vector_range &mvr) | Swaps the contents of the sub vectors. | 
| const_iterator begin () const | Returns a const_iteratorpointing to the beginning
of thematrix_vector_range. | 
| const_iterator end () const | Returns a const_iteratorpointing to the end of
thematrix_vector_range. | 
| iterator begin () | Returns a iteratorpointing to the beginning of
thematrix_vector_range. | 
| iterator end () | Returns a iteratorpointing to the end of thematrix_vector_range. | 
| const_reverse_iterator rbegin () const | Returns a const_reverse_iteratorpointing to the
beginning of thematrix_vector_range. | 
| const_reverse_iterator rend () const | Returns a const_reverse_iteratorpointing to the
end of the reversedmatrix_vector_range. | 
| reverse_iterator rbegin () | Returns a reverse_iteratorpointing to the
beginning of the reversedmatrix_vector_range. | 
| reverse_iterator rend () | Returns a reverse_iteratorpointing to the end of
the reversedmatrix_vector_range. | 
The templated class matrix_vector_slice<M>
allows addressing a sliced sub vector of a matrix.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    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_slice<matrix<double> > mvs (m, slice (0, 1, 3), slice (0, 1, 3));
    std::cout << mvs << std::endl;
}
Defined in the header matrix_proxy.hpp.
| Parameter | Description | Default | 
|---|---|---|
| M | The type of matrix referenced. | 
If the specified slices fall outside that of the index range of
the matrix, then the matrix_vector_slice is not a well
formed Vector Expression. That is, access to an element which is
outside of the matrix is undefined.
None, except for those imposed by the requirements of Vector Expression .
vector_expression<matrix_vector_slice<M>
>
| Member | Description | 
|---|---|
| matrix_vector_slice (matrix_type &data, | Constructs a sub vector. | 
| size_type size () const | Returns the size of the sub vector. | 
| const_reference operator () (size_type i)
const | Returns the value of the i-th element. | 
| reference operator () (size_type i) | Returns a reference of the i-th element. | 
| matrix_vector_slice &operator = (const
matrix_vector_slice &mvs) | The assignment operator. | 
| matrix_vector_slice &assign_temporary
(matrix_vector_slice &mvs) | Assigns a temporary. May change the matrix vector slice vs. | 
| template<class AE> | The extended assignment operator. | 
| template<class AE> | Assigns a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Adds the vector expression to the sub vector. | 
| template<class AE> | Adds a vector expression to the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Subtracts the vector expression from the sub vector. | 
| template<class AE> | Subtracts a vector expression from the sub vector. Left and right hand side of the assignment should be independent. | 
| template<class AT> | A computed assignment operator. Multiplies the sub vector with a scalar. | 
| template<class AT> | A computed assignment operator. Divides the sub vector through a scalar. | 
| void swap (matrix_vector_slice &mvs) | Swaps the contents of the sub vectors. | 
| const_iterator begin () const | Returns a const_iteratorpointing to the beginning
of thematrix_vector_slice. | 
| const_iterator end () const | Returns a const_iteratorpointing to the end of
thematrix_vector_slice. | 
| iterator begin () | Returns a iteratorpointing to the beginning of
thematrix_vector_slice. | 
| iterator end () | Returns a iteratorpointing to the end of thematrix_vector_slice. | 
| const_reverse_iterator rbegin () const | Returns a const_reverse_iteratorpointing to the
beginning of the reversedmatrix_vector_slice. | 
| const_reverse_iterator rend () const | Returns a const_reverse_iteratorpointing to the
end of the reversedmatrix_vector_slice. | 
| reverse_iterator rbegin () | Returns a reverse_iteratorpointing to the
beginning of the reversedmatrix_vector_slice. | 
| reverse_iterator rend () | Returns a reverse_iteratorpointing to the end of
the reversedmatrix_vector_slice. | 
The templated class matrix_range<M> allows
addressing a sub matrix of a matrix.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    matrix_range<matrix<double> > mr (m, range (0, 3), range (0, 3));
    for (unsigned i = 0; i < mr.size1 (); ++ i)
        for (unsigned j = 0; j < mr.size2 (); ++ j)
            mr (i, j) = 3 * i + j;
    std::cout << mr << std::endl;
}
Defined in the header matrix_proxy.hpp.
| Parameter | Description | Default | 
|---|---|---|
| M | The type of matrix referenced. | 
If the specified ranges fall outside that of the index range of
the matrix, then the matrix_range is not a well formed
Matrix Expression. That is, access to an element which is outside
of the matrix is undefined.
None, except for those imposed by the requirements of Matrix Expression .
matrix_expression<matrix_range<M> >
| Member | Description | 
|---|---|
| matrix_range (matrix_type &data, | Constructs a sub matrix. | 
| size_type start1 () const | Returns the index of the first row. | 
| size_type size1 () const | Returns the number of rows. | 
| size_type start2 () const | Returns the index of the first column. | 
| size_type size2 () const | Returns the number of columns. | 
| const_reference operator () (size_type i, size_type j)
const | Returns the value of the j-th element in thei-th row. | 
| reference operator () (size_type i, size_type
j) | Returns a reference of the j-th element in thei-th row. | 
| matrix_range &operator = (const matrix_range
&mr) | The assignment operator. | 
| matrix_range &assign_temporary (matrix_range
&mr) | Assigns a temporary. May change the matrix range mr. | 
| template<class AE> | The extended assignment operator. | 
| template<class AE> | Assigns a matrix expression to the sub matrix. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Adds the matrix expression to the sub matrix. | 
| template<class AE> | Adds a matrix expression to the sub matrix. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Subtracts the matrix expression from the sub matrix. | 
| template<class AE> | Subtracts a matrix expression from the sub matrix. Left and right hand side of the assignment should be independent. | 
| template<class AT> | A computed assignment operator. Multiplies the sub matrix with a scalar. | 
| template<class AT> | A computed assignment operator. Divides the sub matrix through a scalar. | 
| void swap (matrix_range &mr) | Swaps the contents of the sub matrices. | 
| const_iterator1 begin1 () const | Returns a const_iterator1pointing to the
beginning of thematrix_range. | 
| const_iterator1 end1 () const | Returns a const_iterator1pointing to the end of
thematrix_range. | 
| iterator1 begin1 () | Returns a iterator1pointing to the beginning of
thematrix_range. | 
| iterator1 end1 () | Returns a iterator1pointing to the end of thematrix_range. | 
| const_iterator2 begin2 () const | Returns a const_iterator2pointing to the
beginning of thematrix_range. | 
| const_iterator2 end2 () const | Returns a const_iterator2pointing to the end of
thematrix_range. | 
| iterator2 begin2 () | Returns a iterator2pointing to the beginning of
thematrix_range. | 
| iterator2 end2 () | Returns a iterator2pointing to the end of thematrix_range. | 
| const_reverse_iterator1 rbegin1 () const | Returns a const_reverse_iterator1pointing to the
beginning of the reversedmatrix_range. | 
| const_reverse_iterator1 rend1 () const | Returns a const_reverse_iterator1pointing to the
end of the reversedmatrix_range. | 
| reverse_iterator1 rbegin1 () | Returns a reverse_iterator1pointing to the
beginning of the reversedmatrix_range. | 
| reverse_iterator1 rend1 () | Returns a reverse_iterator1pointing to the end of
the reversedmatrix_range. | 
| const_reverse_iterator2 rbegin2 () const | Returns a const_reverse_iterator2pointing to the
beginning of the reversedmatrix_range. | 
| const_reverse_iterator2 rend2 () const | Returns a const_reverse_iterator2pointing to the
end of the reversedmatrix_range. | 
| reverse_iterator2 rbegin2 () | Returns a reverse_iterator2pointing to the
beginning of the reversedmatrix_range. | 
| reverse_iterator2 rend2 () | Returns a reverse_iterator2pointing to the end of
reversed thematrix_range. | 
The free subrange functions support the construction
of matrix ranges.
    template<class M>
    matrix_range<M> subrange (M &data,
       M::size_type start1, M::size_type stop1, M::size_type start2, M::size_type, stop2);
    template<class M>
    const matrix_range<const M> subrange (const M &data,
       M::size_type start1, M::size_type stop1, M::size_type start2, M::size_type, stop2);
The free project functions support the construction
of matrix ranges. Existing matrix_range's can be composed with further ranges. The resulting ranges are computed using this existing ranges' compose function.
    template<class M>
    matrix_range<M> project (M &data, const range &r1, const range &r2);
    template<class M>
    const matrix_range<const M> project (const M &data, const range &r1, const range &r2);
    template<class M>
    matrix_range<M> project (matrix_range<M> &data, const range &r1, const range &r2);
    template<class M>
    const matrix_range<M> project (const matrix_range<M> &data, const range &r1, const range &r2);
Defined in the header matrix_proxy.hpp.
M is a model of Matrix Expression .Quadratic depending from the size of the ranges.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    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)
            project (m, range (0, 3), range (0, 3)) (i, j) = 3 * i + j;
    std::cout << project (m, range (0, 3), range (0, 3)) << std::endl;
}
The templated class matrix_slice<M> allows
addressing a sliced sub matrix of a matrix.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    matrix_slice<matrix<double> > ms (m, slice (0, 1, 3), slice (0, 1, 3));
    for (unsigned i = 0; i < ms.size1 (); ++ i)
        for (unsigned j = 0; j < ms.size2 (); ++ j)
            ms (i, j) = 3 * i + j;
    std::cout << ms << std::endl;
}
Defined in the header matrix_proxy.hpp.
| Parameter | Description | Default | 
|---|---|---|
| M | The type of matrix referenced. | 
If the specified slices fall outside that of the index range of
the matrix, then the matrix_slice is not a well formed
Matrix Expression. That is, access to an element which is outside
of the matrix is undefined.
None, except for those imposed by the requirements of Matrix Expression .
matrix_expression<matrix_slice<M> >
| Member | Description | 
|---|---|
| matrix_slice (matrix_type &data, | Constructs a sub matrix. | 
| size_type size1 () const | Returns the number of rows. | 
| size_type size2 () const | Returns the number of columns. | 
| const_reference operator () (size_type i, size_type j)
const | Returns the value of the j-th element in thei-th row. | 
| reference operator () (size_type i, size_type
j) | Returns a reference of the j-th element in thei-th row. | 
| matrix_slice &operator = (const matrix_slice
&ms) | The assignment operator. | 
| matrix_slice &assign_temporary (matrix_slice
&ms) | Assigns a temporary. May change the matrix slice ms. | 
| template<class AE> | The extended assignment operator. | 
| template<class AE> | Assigns a matrix expression to the sub matrix. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Adds the matrix expression to the sub matrix. | 
| template<class AE> | Adds a matrix expression to the sub matrix. Left and right hand side of the assignment should be independent. | 
| template<class AE> | A computed assignment operator. Subtracts the matrix expression from the sub matrix. | 
| template<class AE> | Subtracts a matrix expression from the sub matrix. Left and right hand side of the assignment should be independent. | 
| template<class AT> | A computed assignment operator. Multiplies the sub matrix with a scalar. | 
| template<class AT> | A computed assignment operator. Multiplies the sub matrix through a scalar. | 
| void swap (matrix_slice &ms) | Swaps the contents of the sub matrices. | 
| const_iterator1 begin1 () const | Returns a const_iterator1pointing to the
beginning of thematrix_slice. | 
| const_iterator1 end1 () const | Returns a const_iterator1pointing to the end of
thematrix_slice. | 
| iterator1 begin1 () | Returns a iterator1pointing to the beginning of
thematrix_slice. | 
| iterator1 end1 () | Returns a iterator1pointing to the end of thematrix_slice. | 
| const_iterator2 begin2 () const | Returns a const_iterator2pointing to the
beginning of thematrix_slice. | 
| const_iterator2 end2 () const | Returns a const_iterator2pointing to the end of
thematrix_slice. | 
| iterator2 begin2 () | Returns a iterator2pointing to the beginning of
thematrix_slice. | 
| iterator2 end2 () | Returns a iterator2pointing to the end of thematrix_slice. | 
| const_reverse_iterator1 rbegin1 () const | Returns a const_reverse_iterator1pointing to the
beginning of the reversedmatrix_slice. | 
| const_reverse_iterator1 rend1 () const | Returns a const_reverse_iterator1pointing to the
end of the reversedmatrix_slice. | 
| reverse_iterator1 rbegin1 () | Returns a reverse_iterator1pointing to the
beginning of the reversedmatrix_slice. | 
| reverse_iterator1 rend1 () | Returns a reverse_iterator1pointing to the end of
the reversedmatrix_slice. | 
| const_reverse_iterator2 rbegin2 () const | Returns a const_reverse_iterator2pointing to the
beginning of the reversedmatrix_slice. | 
| const_reverse_iterator2 rend2 () const | Returns a const_reverse_iterator2pointing to the
end of the reversedmatrix_slice. | 
| reverse_iterator2 rbegin2 () | Returns a reverse_iterator2pointing to the
beginning of the reversedmatrix_slice. | 
| reverse_iterator2 rend2 () | Returns a reverse_iterator2pointing to the end of
the reversedmatrix_slice. | 
The free subslice functions support the construction
of matrix slices.
    template<class M>
    matrix_slice<M> subslice (M &data,
       M::size_type start1, M::difference_type stride1, M::size_type size1,
       M::size_type start2, M::difference_type stride2, M::size_type size2);
    template<class M>
    const matrix_slice<const M> subslice (const M &data,
       M::size_type start1, M::difference_type stride1, M::size_type size1,
       M::size_type start2, M::difference_type stride2, M::size_type size2);
The free project functions support the construction
of matrix slices. Existing matrix_slice's can be composed with further ranges or slices. The resulting slices are computed using this existing slices' compose function.
    template<class M>
    matrix_slice<M> project (M &data, const slice &s1, const slice &s2);
    template<class M>
    const matrix_slice<const M> project (const M &data, const slice &s1, const slice &s2);
    template<class M>
    matrix_slice<M> project (matrix_slice<M> &data, const range &r1, const range &r2);
    template<class M>
    const matrix_slice<M> project (const matrix_slice<M> &data, const range &r1, const range &r2);
    template<class M>
    matrix_slice<M> project (matrix_slice<M> &data, const slice &s1, const slice &s2);
    template<class M>
    const matrix_slice<M> project (const matrix_slice<M> &data, const slice &s1, const slice &s2);
Defined in the header matrix_proxy.hpp.
M is a model of Matrix Expression .Quadratic depending from the size of the slices.
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/matrix_proxy.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
    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)
            project (m, slice (0, 1, 3), slice (0, 1, 3)) (i, j) = 3 * i + j;
    std::cout << project (m, slice (0, 1, 3), slice (0, 1, 3)) << std::endl;
}
Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
   Use, modification and distribution are subject to the
   Boost Software License, Version 1.0.
   (See accompanying file LICENSE_1_0.txt
   or copy at 
      http://www.boost.org/LICENSE_1_0.txt
   ).