稀疏矩陣(Sparse Matricies)

映射矩陣(Mapped Matrix)

說明

模板類mapped_matrix<T, F, A> 是使用元素映射(element maps)的稀疏矩陣的基礎容器適配器(base container adaptor)。對於 a (m xn)-維 稀疏矩陣且0 <= i < m, 0 <= j < n ,那麼對於行優先定向(row major orientation)的非零元素mi, j 通過(i x n + j) 來映射,或者對於列優先定向(column major orientation)的非零元素mi, j 通過(i + j x m) 來映射到相關容器中的連續元素中,也就是說,對於行優先定向(row major orientation)的容器中的元素k = mi1 ,j1k + 1 = mi2 ,j2滿足i1 < i2 或者(i1 = i2j1 < j2) ,對於列優先定向(column major orientation)的容器中的元素k = mi1 ,j1k + 1 = mi2 ,j2滿足j1 < j2(j1 = j2i1 < i2)

例子

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    mapped_matrix<double> m (3, 3, 3 * 3);
    for (unsigned i = 0; i < m.size1 (); ++ i)
        for (unsigned j = 0; j < m.size2 (); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}

定義

定義在頭文件 matrix_sparse.hpp 中。

模板參數

參數 說明 缺省值
T 存放在映射矩陣中的對象的類型。
F 描述存儲組織的函數對象。 [1] row_major
A 適配數組的類型。 [2] map_std<std::size_t, T>

模型(Model of)

矩陣(Matrix) 。

類型要求(Type requirements)

沒有,除了由矩陣(Matrix) 所施加的類型要求。

公有基類(Public base classes)

matrix_container<mapped_matrix<T, F, A> >

成員

成員 說明
mapped_matrix () 分配一個至多只包含0行0個元素的mapped_matrix
mapped_matrix (size_type size1, size_type2, size_type non_zeros = 0) 分配一個至多只包含size1size2個元素的mapped_matrix
mapped_matrix (const mapped_matrix &m) 拷貝構造函數。
template<class AE>
mapped_matrix (size_type non_zeros, const matrix_expression<AE> &ae)
擴展的拷貝構造函數。
void resize (size_type size1, size_type size2, bool preserve = true) 重新分配一個mapped_matrix來存儲最多 size1行且第行最多size2個元素的 mapped_matrix。如果指定了, 那麼這些已經存在的元素將會保留。
size_type size1 () const 返回行數。
size_type size2 () const 返回列數。
const_reference operator () (size_type i, size_type j) const 返回第 i-th行第 -th個元素值。
reference operator () (size_type i, size_type j) 返回第 i-th行第 -th個元素的引用。
mapped_matrix &operator = (const mapped_matrix &m) 賦值運算符。
mapped_matrix &assign_temporary (mapped_matrix &m) 賦值給一個臨時變量,有可能會改變映射矩陣 m
template<class AE>
mapped_matrix &operator = (const matrix_expression<AE> &ae)
擴展的賦值運算符。
template<class AE>
mapped_matrix &assign (const matrix_expression<AE> &ae)
將一個矩陣賦值給一個映射矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
mapped_matrix &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符。將一個矩陣加到一個映射矩陣中。
template<class AE>
mapped_matrix &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣加到一個映射矩陣中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
mapped_matrix &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符。從一個映射矩陣中減去一個矩陣。
template<class AE>
mapped_matrix &minus_assign (const matrix_expression<AE> &ae)
從一個映射矩陣中減去一個矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
mapped_matrix &operator *= (const AT &at)
一個運算賦值運算符。將一個映射矩陣乘以一個標量。
template<class AT>
mapped_matrix &operator /= (const AT &at)
一個運算賦值運算符。將一個映射矩陣除以一個標量。
void swap (mapped_matrix &m) 交換映射矩陣的內容。
true_refrence insert_element (size_type i, size_type j, const_reference t) 將元素 t 插入到第i-th行 第j-th列。不允許有重複的元素。
void erase_element (size_type i, size_type j) 刪除在第i-th行 第j-th列的元素。
void clear () 清除映射矩陣。
const_iterator1 begin1 () const 返回指向mapped_matrix開始處的const_iterator1
const_iterator1 end1 () const 返回指向mapped_matrix終止處的const_iterator1
iterator1 begin1 () 返回指向mapped_matrix開始處的iterator1
iterator1 end1 () 返回指向mapped_matrix終止處的iterator1
const_iterator2 begin2 () const 返回指向mapped_matrix開始處的const_iterator2
const_iterator2 end2 () const 返回指向mapped_matrix終止處的const_iterator2
iterator2 begin2 () 返回指向mapped_matrix開始處的iterator2
iterator2 end2 () 返回指向mapped_matrix終止處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉(reversed)的mapped_matrix開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉(reversed)的mapped_matrix終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉(reversed)的mapped_matrix開始處的reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉(reversed)的mapped_matrix終止處的reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉(reversed)的mapped_matrix開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉(reversed)的mapped_matrix終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉(reversed)的mapped_matrix開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉(reversed)的mapped_matrix終止處的reverse_iterator2

注意

[1]對於存儲組織( storage organization)所支持的參數是row_majorcolumn_major

[2] 對於適配數組所支持的參數是map_array<std::size_t, T>map_std<std::size_t, T>。後者與std::map<std::size_t, T>等價。

壓縮矩陣(Compressed Matrix)

說明

模板類compressed_matrix<T, F, IB, IA, TA> 是壓縮矩陣的基礎容器適配器(base container adaptor)。 對於 a (m xn)-維 壓縮矩陣且0 <= i < m, 0 <= j < n ,那麼對於行優先定向(row major orientation)的非零元素mi, j 通過(i x n + j) 來映射,或者對於列優先定向(column major orientation)的非零元素mi, j 通過(i + j x m) 來映射到相關容器中的連續元素中,也就是說,對於行優先定向(row major orientation)的容器中的元素k = mi1 ,j1k + 1 = mi2 ,j2滿足i1 < i2 或者(i1 = i2j1 < j2) ,對於列優先定向(column major orientation)的容器中的元素k = mi1 ,j1k + 1 = mi2 ,j2滿足j1 < j2(j1 = j2i1 < i2)

例子

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    compressed_matrix<double> m (3, 3, 3 * 3);
    for (unsigned i = 0; i < m.size1 (); ++ i)
        for (unsigned j = 0; j < m.size2 (); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}

定義

定義在頭文件 matrix_sparse.hpp 中。

模板參數

參數 說明 缺省值
T 存儲在壓縮矩陣中的元素的類型。
F 描述存儲組織的函數對象。[1] row_major
IB 壓縮向量(compressed vector)的下標起始值(index base)。 [2] 0
IA 用於索引的適配數組的類型。 [3] unbounded_array<std::size_t>
TA 用於存儲值的適配數組的類型。[3] unbounded_array<T>

模型(Model of)

矩陣(Matrix) 。

類型要求(Type requirements)

沒有,除了由矩陣(Matrix) 所施加的類型要求。

公有基類(Public base classes)

matrix_container<compressed_matrix<T, F, IB, IA, TA> >

成員

成員 說明
compressed_matrix () 分配一個至多只包含0行0個元素的compressed_matrix
compressed_matrix (size_type size1, size_type2, size_type non_zeros = 0) 分配一個至多只包含size1size2個元素的compressed_matrix
compressed_matrix (const compressed_matrix &m) 拷貝構造函數。
template<class AE>
compressed_matrix (size_type non_zeros, const matrix_expression<AE> &ae)
擴展的拷貝構造函數。
void resize (size_type size1, size_type size2, bool preserve = true) 重新分配一個compressed_matrix來存儲最多 size1行且第行最多size2個元素的 compressed_matrix。如果指定了, 那麼這些已經存在的元素將會保留。
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個元素的引用。
compressed_matrix &operator = (const compressed_matrix &m) 賦值運算符。
compressed_matrix &assign_temporary (compressed_matrix &m) 賦值給一個臨時變量,有可能會改變壓縮矩陣m
template<class AE>
compressed_matrix &operator = (const matrix_expression<AE> &ae)
擴展的賦值運算符。
template<class AE>
compressed_matrix &assign (const matrix_expression<AE> &ae)
將一個矩陣賦值給一個壓縮矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
compressed_matrix &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符。將一個矩陣加到一個壓縮矩陣中。
template<class AE>
compressed_matrix &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣加到一個壓縮矩陣中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
compressed_matrix &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符。從一個壓縮矩陣中減去一個矩陣。
template<class AE>
compressed_matrix &minus_assign (const matrix_expression<AE> &ae)
從一個壓縮矩陣中減去一個矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
compressed_matrix &operator *= (const AT &at)
一個運算賦值運算符。將一個壓縮矩陣乘以一個標量。
template<class AT>
compressed_matrix &operator /= (const AT &at)
一個運算賦值運算符。將一個壓縮矩陣除以一個標量。
void swap (compressed_matrix &m) 交換壓縮矩陣的內容。
true_reference insert_element (size_type i, size_type j, const_reference t) 將元素t插入到第i-th行第 j-th列。不允許有重複的元素。
void erase_element (size_type i, size_type j) 刪除第i-th行第 j-th列的元素。
void clear () 清除壓縮矩陣。
const_iterator1 begin1 () const 返回指向compressed_matrix開始處的const_iterator1
const_iterator1 end1 () const 返回指向compressed_matrix終止處的const_iterator1
iterator1 begin1 () 返回指向compressed_matrix開始處的iterator1
iterator1 end1 () 返回指向compressed_matrix終止處的iterator1
const_iterator2 begin2 () const 返回指向compressed_matrix開始處的const_iterator2
const_iterator2 end2 () const 返回指向compressed_matrix終止處的const_iterator2
iterator2 begin2 () 返回指向compressed_matrix開始處的iterator2
iterator2 end2 () 返回指向compressed_matrix終止處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉(reversed)的compressed_matrix開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉(reversed)的compressed_matrix終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉(reversed)的compressed_matrix開始處的reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉(reversed)的compressed_matrix終止處的reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉(reversed)的compressed_matrix開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉(reversed)的compressed_matrix終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉(reversed)的compressed_matrix開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉(reversed)的compressed_matrix終止處的reverse_iterator2

注意

[1] 對於存儲組織( storage organization)所支持的參數是row_majorcolumn_major

[2] 對於下標起始值(index base)所支持的至少是0和1。

[3] 對於適配數組(adapted array)所支持的參數是unbounded_array<> , bounded_array<>std::vector<>

Coordinate Matrix

說明

模板類coordinate_matrix<T, F, IB, IA, TA> 是壓縮矩陣的基礎容器適配器( base container adaptor )。對於 a (m x n )-維 coordinate matrix 且 0 <= i < m, 0 <= j < n 那麼對於行優先定向(row major orientation)的非零元素mi, j 通過(i x n + j) 來映射,或者對於列優先定向(column major orientation)的非零元素mi, j 通過(i + j x m) 來映射到相關容器中的連續元素中,也就是說,對於行優先定向(row major orientation)的容器中的元素k = mi1 ,j1k + 1 = mi2 ,j2滿足i1 < i2 或者(i1 = i2j1 < j2) ,對於列優先定向(column major orientation)的容器中的元素k = mi1 ,j1k + 1 = mi2 ,j2滿足j1 < j2(j1 = j2i1 < i2)

例子

#include <boost/numeric/ublas/matrix_sparse.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    coordinate_matrix<double> m (3, 3, 3 * 3);
    for (unsigned i = 0; i < m.size1 (); ++ i)
        for (unsigned j = 0; j < m.size2 (); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}

定義

定義在頭文件 matrix_sparse.hpp 中。

模板參數

參數 說明 缺省值
T 存放在coordinate matrix中的元素的類型。
F 描述存儲組織的函數對象。[1] row_major
IB coordinate vector的下標起始值(base index)。[2] 0
IA 用於存儲索引的適配數組的類型。 [3] unbounded_array<std::size_t>
TA 用於存儲值的適配數組的類型。 [3] unbounded_array<T>

模型(Model of)

矩陣(Matrix) 。

類型要求(Type requirements)

沒有,除了由矩陣(Matrix) 所施加的類型要求。

公有基類(Public base classes)

matrix_container<coordinate_matrix<T, F, IB, IA, TA> >

成員

成員 說明
coordinate_matrix () 分配一個至多只包含0行0個元素的coordinate_matrix
coordinate_matrix (size_type size1, size_type2, size_type non_zeros = 0) 分配一個至多只包含size1size2個元素的coordinate_matrix
coordinate_matrix (const coordinate_matrix &m) 拷貝構造函數。
template<class AE>
coordinate_matrix (size_type non_zeros, const matrix_expression<AE> &ae)
擴展的拷貝構造函數。
void resize (size_type size1, size_type size2, bool preserve = true) 重新分配一個coordinate_matrix來存儲最多 size1行且第行最多size2個元素的 coordinate_matrix。如果指定了, 那麼這些已經存在的元素將會保留。
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個元素的引用。
coordinate_matrix &operator = (const coordinate_matrix &m) 賦值運算符。
coordinate_matrix &assign_temporary (coordinate_matrix &m) 賦值給一個臨時變量,有可能會改變 coordinate matrix m.
template<class AE>
coordinate_matrix &operator = (const matrix_expression<AE> &ae)
擴展的賦值運算符。
template<class AE>
coordinate_matrix &assign (const matrix_expression<AE> &ae)
將一個矩陣賦值給一個coordinate_matrix。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
coordinate_matrix &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符。將一個矩陣加到一個coordinate_matrix中。
template<class AE>
coordinate_matrix &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣加到一個coordinate_matrix中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
coordinate_matrix &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符。從一個coordinate_matrix中減去一個矩陣。
template<class AE>
coordinate_matrix &minus_assign (const matrix_expression<AE> &ae)
從一個coordinate_matrix中減去一個矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
coordinate_matrix &operator *= (const AT &at)
一個運算賦值運算符。將一個壓縮矩陣乘以一個標量。
template<class AT>
coordinate_matrix &operator /= (const AT &at)
一個運算賦值運算符。將一個壓縮矩陣除以一個標量。
void swap (coordinate_matrix &m) 交換coordinate_matrix的內容。
true_reference insert_element (size_type i, size_type j, const_reference t) 將元素t插入到第i-th行第 j-th列。不允許有重複的元素。
void append_element (size_type i, size_type j, const_reference t) 將元素 t 附加到第i-th行第j-th個元素。 重複的元素可以添加到一個coordinate_matrix中。 它們通過函數sort合併為一個單獨的算術和元素(arithmetically summed element)。
void erase_element (size_type i, size_type j) 刪除第i-th行第 j-th列的元素。
void clear () 交換壓縮矩陣的內容
const_iterator1 begin1 () const 返回指向coordinate_matrix開始處的const_iterator1
const_iterator1 end1 () const 返回指向coordinate_matrix終止處的const_iterator1
iterator1 begin1 () 返回指向coordinate_matrix開始處的iterator1
iterator1 end1 () 返回指向coordinate_matrix終止處的iterator1。.
const_iterator2 begin2 () const 返回指向coordinate_matrix開始處的const_iterator2
const_iterator2 end2 () const 返回指向coordinate_matrix終止處的const_iterator2
iterator2 begin2 () 返回指向coordinate_matrix開始處的iterator2
iterator2 end2 () 返回指向coordinate_matrix終止處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉(reversed)的coordinate_matrix開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉(reversed)的coordinate_matrix終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉(reversed)的coordinate_matrix開始處的reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉(reversed)的coordinate_matrix終止處的reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉(reversed)的coordinate_matrix開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉(reversed)的coordinate_matrix終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉(reversed)的coordinate_matrix開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉(reversed)的coordinate_matrix終止處的reverse_iterator2

注意

[1] 對於存儲組織( storage organization)所支持的參數是row_majorcolumn_major

[2] 對於下標起始值(index base)所支持的至少是0和1。

[3] 對於適配數組(adapted array)所支持的參數是unbounded_array<> , bounded_array<>std::vector<>


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