矩陣策略(Matrix Proxies)

矩陣行(Matrix Row)

說明

模板類 matrix_row<M> 允許定位(address)矩陣中的一行。

例子

#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;
    }
}

定義

定義在頭文件 matrix_proxy.hpp 中。

模板參數

參數 說明 缺省值
M 被引用的矩陣的類型。

模型(Model of)

向量表達式(Vector Expression)

如果指定的行在矩陣的行下標範圍之外,那麼matrix_row 就不是合適的(well formed)向量表達式(Vector Expression)。也就是說,訪問矩陣之外的一個元素是未定義的

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

vector_expression<matrix_row<M> >

成員

成員 說明
matrix_row (matrix_type &data, size_type i) 構造一個子向量。
size_type size () const 返回子向量的大小。
const_reference operator () (size_type i) const 返回第i-th 個元素值。
reference operator () (size_type i) 返回第i-th 個元素的引用。
matrix_row &operator = (const matrix_row &mr) 賦值運算符。
matrix_row &assign_temporary (matrix_row &mr) 賦值給一個臨時變量,可能會改變矩陣mr
template<class AE>
matrix_row &operator = (const vector_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
matrix_row &assign (const vector_expression<AE> &ae)
將一個向量表達式增加到一個了向量中,賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_row &operator += (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個向量表達式增加到一個子向量中。
template<class AE>
matrix_row &plus_assign (const vector_expression<AE> &ae)
將一個向量增加到一個子向量中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_row &operator -= (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子向量中減去一個向量。
template<class AE>
matrix_row &minus_assign (const vector_expression<AE> &ae)
從一個子向量減去一個向量。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
matrix_row &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將子向量乘以一個標量。
template<class AT>
matrix_row &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量除以一個標量。
void swap (matrix_row &mr) 交換子向量的內容。
const_iterator begin () const 返回指向matrix_row開始處的const_iterator
const_iterator end () const 返回指向matrix_row終止處的const_iterator
iterator begin () 返回指向matrix_row開始處的iterator
iterator end () 返回指向matrix_row終止處的iterator
const_reverse_iterator rbegin () const 返回指向反轉的(reversed)matrix_row開始處的const_reverse_iterator
const_reverse_iterator rend () const 返回指向反轉的(reversed)matrix_row終止處的const_reverse_iterator
reverse_iterator rbegin () 返回指向反轉的(reversed)matrix_row開始處的reverse_iterator
reverse_iterator rend () 返回指向反轉的(reversed)matrix_row終止處的reverse_iterator

Projections

說明

自由函數row 支持構造矩陣的行。

原型


    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);

定義

定義在頭文件 matrix_proxy.hpp 中。

類型要求(Type requirements)

複雜度(Complexity)

依賴於行的大小的線性複雜度。

例子

#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;
    }
}

Matrix Column

說明

模板類matrix_column<M> 允許定位(address)矩陣中的一列。

例子

#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;
    }
}

定義

定義在頭文件 matrix_proxy.hpp 中。

模板參數

參數 說明 缺省值
M 被引用的矩陣的類型。

模型(Model of)

向量表達式(Vector Expression)

如果指定的列在矩陣的列下標範圍之外,那麼matrix_column 就不是合適的(well formed)向量表達式(Vector Expression)。也就是說,訪問矩陣之外的一個元素是未定義的

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

vector_expression<matrix_column<M> >

成員

成員 說明
matrix_column (matrix_type &data, size_type j) 構造一個子向量。
size_type size () const 返回子向量的大小。
const_reference operator () (size_type i) const 返回第i-th 個元素值。
reference operator () (size_type i) 返回第i-th 個元素的引用。
matrix_column &operator = (const matrix_column &mc) 賦值運算符。
matrix_column &assign_temporary (matrix_column &mc) 賦值給一個臨時變量,可能會改變矩陣列mc
template<class AE>
matrix_column &operator = (const vector_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
matrix_column &assign (const vector_expression<AE> &ae)
將一個向量表達式增加到一個了向量中,賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_column &operator += (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個向量表達式增加到一個子向量中。
template<class AE>
matrix_column &plus_assign (const vector_expression<AE> &ae)
將一個向量增加到一個子向量中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_column &operator -= (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子向量中減去一個向量。
template<class AE>
matrix_column &minus_assign (const vector_expression<AE> &ae)
從一個子向量減去一個向量。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
matrix_column &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將子向量乘以一個標量。
template<class AT>
matrix_column &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量除以一個標量。
void swap (matrix_column &mc) 交換子向量的內容。
const_iterator begin () const 返回指向matrix_column開始處的const_iterator
const_iterator end () const 返回指向matrix_column終止處的const_iterator
iterator begin () 返回指向matrix_column開始處的iterator
iterator end () 返回指向matrix_column終止處的iterator
const_reverse_iterator rbegin () const 返回指向反轉的(reversed)matrix_column開始處的const_reverse_iterator
const_reverse_iterator rend () const 返回指向反轉的(reversed)matrix_column終止處的const_reverse_iterator
reverse_iterator rbegin () 返回指向反轉的(reversed)matrix_column開始處的reverse_iterator
reverse_iterator rend () 返回指向反轉的(reversed)matrix_column終止處的reverse_iterator

Projections

說明

自由函數column支持構造矩陣的列。

原型


    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);

定義

定義在頭文件 matrix_proxy.hpp 中。

類型要求(Type requirements)

複雜度(Complexity)

依賴於列大小的線性複雜度。

例子

#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;
    }
}

Vector Range

說明

模板類matrix_vector_range<M> 允許定位(address)矩陣的一個子向量(sub vector)。

例子

#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;
}

定義

定義在頭文件 matrix_proxy.hpp 中。

模板參數

參數 說明 缺省值
M 被引用的矩陣的類型。

模型(Model of)

向量表達式(Vector Expression)

如果指定的範圍在矩陣的範圍之外,那麼matrix_vector_range 就不是合適的(well formed)向量表達式(Vector Expression)。也就是說,訪問矩陣之外的一個元素是未定義的

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

vector_expression<matrix_vector_range<M> >

成員

成員 說明
matrix_vector_range (matrix_type &data,
const range &r1, const range &r2)
構造一個子向量。
size_type size () const 返回子向量的大小。
const_reference operator () (size_type i) const 返回第i-th 個元素值。
reference operator () (size_type i) 返回第i-th 個元素的引用。
matrix_vector_range &operator = (const matrix_vector_range &mvr) 賦值運算符。
matrix_vector_range &assign_temporary (matrix_vector_range &mvr) 賦值給一個臨時變量,可能會改變矩陣向量範圍mvr.
template<class AE>
matrix_vector_range &operator = (const vector_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
matrix_vector_range &assign (const vector_expression<AE> &ae)
將一個向量表達式增加到一個了向量中,賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_vector_range &operator += (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個向量表達式增加到一個子向量中。
template<class AE>
matrix_vector_range &plus_assign (const vector_expression<AE> &ae)
將一個向量增加到一個子向量中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_vector_range &operator -= (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子向量中減去一個向量。
template<class AE>
matrix_vector_range &minus_assign (const vector_expression<AE> &ae)
從一個子向量減去一個向量。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
matrix_vector_range &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將子向量乘以一個標量。
template<class AT>
matrix_vector_range &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量除以一個標量。
void swap (matrix_vector_range &mvr) Swaps the contents of the sub vectors.
const_iterator begin () const 返回指向matrix_vector_range開始處的const_iterator
const_iterator end () const 返回指向matrix_vector_range終止處的const_iterator
iterator begin () 返回指向matrix_vector_range開始處的iterator
iterator end () 返回指向matrix_vector_range終止處的iterator
const_reverse_iterator rbegin () const 返回指向反轉的(reversed)matrix_vector_range開始處的const_reverse_iterator
const_reverse_iterator rend () const 返回指向反轉的(reversed)matrix_vector_range終止處的const_reverse_iterator
reverse_iterator rbegin () 返回指向反轉的(reversed)matrix_vector_range開始處的reverse_iterator
reverse_iterator rend () 返回指向反轉的(reversed)matrix_vector_range終止處的reverse_iterator

向量切分(Vector Slice)

說明

模板類matrix_vector_slice<M> 允許定位(address)一個矩陣中被切分的(sliced)一個子向量(sub vector)。

例子

#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;
}

定義

定義在頭文件 matrix_proxy.hpp 中。

模板參數

參數 說明 缺省值
M 被引用的矩陣的類型。

模型(Model of)

向量表達式(Vector Expression)

如果指定的矩陣切分(slices)在矩陣的範圍之外,那麼matrix_vector_slice 就不是合適的(well formed)向量表達式(Vector Expression)。也就是說,訪問矩陣之外的一個元素是未定義的

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

vector_expression<matrix_vector_slice<M> >

成員

成員 說明
matrix_vector_slice (matrix_type &data,
const slice &s1, const slice &s2)
構造一個子向量。
size_type size () const 返回子向量的大小。
const_reference operator () (size_type i) const 返回第i-th 個元素值。
reference operator () (size_type i) 返回第i-th 個元素的引用。
matrix_vector_slice &operator = (const matrix_vector_slice &mvs) 賦值運算符。
matrix_vector_slice &assign_temporary (matrix_vector_slice &mvs) 賦值給一個臨時變量,可能會改變矩陣向量分割(slice)vs.
template<class AE>
matrix_vector_slice &operator = (const vector_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
matrix_vector_slice &assign (const vector_expression<AE> &ae)
將一個向量表達式增加到一個了向量中,賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_vector_slice &operator += (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個向量表達式增加到一個子向量中。
template<class AE>
matrix_vector_slice &plus_assign (const vector_expression<AE> &ae)
將一個向量增加到一個子向量中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_vector_slice &operator -= (const vector_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子向量中減去一個向量。
template<class AE>
matrix_vector_slice &minus_assign (const vector_expression<AE> &ae)
從一個子向量減去一個向量。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
matrix_vector_slice &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將子向量乘以一個標量。
template<class AT>
matrix_vector_slice &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子向量除以一個標量。
void swap (matrix_vector_slice &mvs) Swaps the contents of the sub vectors.
const_iterator begin () const 返回指向matrix_vector_slice開始處的const_iterator
const_iterator end () const 返回指向matrix_vector_slice終止處的const_iterator
iterator begin () 返回指向matrix_vector_slice開始處的iterator
iterator end () 返回指向matrix_vector_slice終止處的iterator
const_reverse_iterator rbegin () const 返回指向反轉的(reversed)matrix_vector_range開始處的const_reverse_iterator
const_reverse_iterator rend () const 返回指向反轉的(reversed)matrix_vector_range終止處的const_reverse_iterator
reverse_iterator rbegin () 返回指向反轉的(reversed)matrix_vector_range開始處的reverse_iterator
reverse_iterator rend () 返回指向反轉的(reversed)matrix_vector_range終止處的reverse_iterator

Matrix Range

說明

模板類matrix_range<M> 允許定位(address)一個矩陣的子矩陣(sub 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;
}

定義

定義在頭文件 matrix_proxy.hpp 中。

模板參數

參數 說明 缺省值
M 被引用的矩陣的類型。

模型(Model of)

矩陣表達式(Matrix Expression)

如果指定的範圍在矩陣的下標範圍之外,那麼matrix_range 就不是合適的(well formed)矩陣表達式(Matrix Expression)。也就是說,訪問矩陣之外的一個元素是未定義的

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

matrix_expression<matrix_range<M> >

成員

成員 說明
matrix_range (matrix_type &data,
const range &r1, const range &r2)
構造一個子矩陣。
size_type start1 () const 返回第一行的下標。
size_type size1 () const 返回行數。
size_type start2 () const 返回第一列的下標。
size_type size2 () const 返回列數。
const_reference operator () (size_type i, size_type j) const 返回第i-th行第j-th列的元素值。
reference operator () (size_type i, size_type j) 返回第i-th行第j-th列的元素的引用。
matrix_range &operator = (const matrix_range &mr) 賦值運算符。
matrix_range &assign_temporary (matrix_range &mr) 賦值給一個臨時變量。可能會改變矩陣範圍 mr .
template<class AE>
matrix_range &operator = (const matrix_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
matrix_range &assign (const matrix_expression<AE> &ae)
將一個矩陣表達式賦給一個子矩陣。左邊和右邊的賦值應當是相互獨立的。
template<class AE>
matrix_range &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個矩陣表達式增加到一個子矩陣中。
template<class AE>
matrix_range &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣增加到一個子矩陣中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_range &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子矩陣中減去一個向量。
template<class AE>
matrix_range &minus_assign (const matrix_expression<AE> &ae)
從一個子矩陣減去一個矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
matrix_range &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將子矩陣乘以一個標量。
template<class AT>
matrix_range &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子矩陣除以一個標量。
void swap (matrix_range &mr) 交換子矩陣的內容。
const_iterator1 begin1 () const 返回指向matrix_range開始處的const_iterator1
const_iterator1 end1 () const 返回指向matrix_range終止處的const_iterator1
iterator1 begin1 () 返回指向matrix_range開始處的iterator1
iterator1 end1 () 返回指向matrix_range開始處的iterator1
const_iterator2 begin2 () const 返回指向matrix_range開始處的const_iterator2
const_iterator2 end2 () const 返回指向matrix_range終止處的const_iterator2
iterator2 begin2 () 返回指向matrix_range開始處的iterator2
iterator2 end2 () 返回指向matrix_range開始處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉的(reversed)matrix_range開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉的(reversed)matrix_range終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉的(reversed)matrix_range開始處的const_reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉的(reversed)matrix_range終止處的const_reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉的(reversed)matrix_range開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉的(reversed)matrix_range終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉的(reversed)matrix_range開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉的(reversed)matrix_range終止處的reverse_iterator2

Simple Projections

說明

自由函數subrange 支持構造矩陣的範圍。

原型


    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);

Generic Projections

說明

自由函數支持構造矩陣的範圍(range)。已經存在的matrix_range 可以用其它的範圍(range)來組成。結果範圍(range)使用其它已經存在的範圍(range)的compose 函數來計算。

原型


    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);

定義

定義在頭文件 matrix_proxy.hpp 中。

類型要求(Type requirements)

複雜度(Complexity)

依賴於範圍(range)大小的二次方複雜度。

例子

#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;
}

Matrix Slice

說明

模板類matrix_slice<M> 允許定位一個矩陣被切分的(sliced)的子矩陣(sub 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;
}

定義

定義在頭文件 matrix_proxy.hpp 中。

模板參數

參數 說明 缺省值
M 被引用的矩陣的類型。

模型(Model of)

矩陣表達式(Matrix Expression)

如果指定的切要範圍位於矩陣的下標範圍之外,那麼matrix_slice 就不是合適的(well formed)矩陣表達式( Matrix Expression)。也就是說,訪問矩陣之外的元素是未定義的

類型要求(Type requirements)

沒有,除了由向量表達式(Vector Expression) 所施加的類型要求。

公有基類(Public base classes)

matrix_expression<matrix_slice<M> >

成員

成員 說明
matrix_slice (matrix_type &data,
const slice &s1, const slice &s2)
構造一個子矩陣。
size_type size1 () const 返回行數。
size_type size2 () const 返回列數。
const_reference operator () (size_type i, size_type j) const 返回第i-th行第j-th列的元素值。
reference operator () (size_type i, size_type j) 返回第i-th行第j-th列的元素的引用。
matrix_slice &operator = (const matrix_slice &ms) 賦值運算符。
matrix_slice &assign_temporary (matrix_slice &ms) 賦值給一個臨時變量。可能會改變矩陣分割ms .
template<class AE>
matrix_slice &operator = (const matrix_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
matrix_slice &assign (const matrix_expression<AE> &ae)
將一個矩陣表達式賦給一個子矩陣。左邊和右邊的賦值應當是相互獨立的。
template<class AE>
matrix_slice &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個矩陣表達式增加到一個子矩陣中。
template<class AE>
matrix_slice &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣增加到一個子矩陣中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
matrix_slice &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個子矩陣中減去一個向量。
template<class AE>
matrix_slice &minus_assign (const matrix_expression<AE> &ae)
從一個子矩陣減去一個矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
matrix_slice &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將子矩陣乘以一個標量。
template<class AT>
matrix_slice &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個子矩陣除以一個標量。
void swap (matrix_slice &ms) Swaps the contents of the sub matrices.
const_iterator1 begin1 () const 返回指向matrix_slice開始處的const_iterator1
const_iterator1 end1 () const 返回指向matrix_slice終止處的const_iterator1
iterator1 begin1 () 返回指向matrix_slice開始處的iterator1
iterator1 end1 () 返回指向matrix_slice終止處的iterator1
const_iterator2 begin2 () const 返回指向matrix_slice開始處的const_iterator2
const_iterator2 end2 () const 返回指向matrix_slice終止處的const_iterator2
iterator2 begin2 () 返回指向matrix_slice開始處的iterator2
iterator2 end2 () 返回指向matrix_slice終止處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉的(reversed)matrix_slice開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉的(reversed)matrix_slice終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉的(reversed)matrix_slice開始處的reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉的(reversed)matrix_slice終止處的reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉的(reversed)matrix_slice開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉的(reversed)matrix_slice終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉的(reversed)matrix_slice開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉的(reversed)matrix_slice終止處的reverse_iterator2

Simple Projections

說明

自由函數subslice 支持構造矩陣的切分(slice)。

原型


    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);

Generic Projections

說明

自由函數支持構造矩陣的切分(slice)。已經存在的matrix_range 可以用其它的範圍(range)或切分(slice)來組成。結果切分(range)使用其它已經存在的切分(slice)的compose 函數來計算。

原型


    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);

定義

定義在頭文件 matrix_proxy.hpp 中。

類型要求(Type requirements)

複雜度(Complexity)

依賴於切分(slice)大小的二次方的複雜度。

例子

#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 ).