矩陣和向量類型概覽

內容:
向量(Vectors)
向量代理(Vector Proxies)
矩陣(Matrices)
矩陣代理(Matrix Proxies)
特殊存儲佈局(Special Storage Layouts)

記法(Notation):

T 是數據類型。 對於一般的線性代數運算這個數據類型是實數類型。例如, double, ...
F 是orientation type (函數對像), 可以是 row_majorcolumn_major
A, IA, TA 是數級存儲類型,例如,std::vector, bounded_array, unbounded_array, ...
TRI triangular functor: lower, unit_lower, strict_lower, upper, unit_upper, strict_upper
M, N 是無符號整數大小 (std::size_t)
IB 是索引基(index base) (std::size_t)
VEC 是任意的向量類型(vector type)
MAT 是任意矩陣類型(matrix type)
[...] 表示優化的參數(optional arguments) - 對於更多的細節參看 "存儲佈局(storage layout)"。

向量(Vectors)

定義 說明
vector<T [, A]>
   v(size);
一個可變以小的T類型的密集矩陣(dense matrix)。 可以指定存儲類型A,缺省為unbounded_array。 元素由A構造, 不需要初始化自身的值。
bounded_vector<T, N>
   v;
一個可變大小的T類型的密集向量(dense vector),但最大大小為 N。缺省構造函數使用大小N來生成v 。 元素由存儲類型bounded_array構造,不需要初始化自身的值。
c_vector<T, M>
   v(size);
一個給定大小的T類型的密集向量。 數據存儲為通常的C++ 數組T data_[M]
zero_vector<T>
   v(size);
給定大小的T類型的零向量。
unit_vector<T>
   v(size, index);
給定大小的T類型的單位向量(unit vector)。 這個向量是0而不是一個單一的指定元素。
index 應當小於 size
mapped_vector<T [, S]>
   v(size);
可變大小的T類型的稀疏向量(sparse vector)。 存儲類型S可以是 std::map<size_t, T>map_array<size_t, T>
compressed_vector<T [,IB, IA, TA]>
   v(size);
可變大小的T類型的壓縮向量(compressed vector)。 非零值作為兩個單獨的數組存儲 - 一個索引數組和一個值數組。索引數組是有序的並且對於每個索引至多有一個entry 。
coordinate_vector<T [,IB, IA, TA]>
   v(size);
可變大小的T類型的稀疏矩陣(sparse matrix)。 非零值作為兩個單獨的數組存儲 - 一個索引數組和一個值數組。對於每個向量每個有多個entries,這些數組是無序的。如果對於相同的 索引有多個值,這些值的和是一個實數值。

注意: 缺省類型定義在boost/numeric/ublas/fwd.hpp

向量代理(Vector Proxies)

定義 說明
vector_range<VEC>
   vr(v, range);
一個向量引用向量v的連續子向量,包含被範圍 range所指定的所有元素。
vector_slice<VEC>
   vs(v, slice);
一個向量引用向量v的由slice所指定的非連續子向量的所有元素。
matrix_row<MAT>
   vr(m, index);
一個向量引用矩陣m的行index-th。
matrix_column<MAT>
   vc(m, index);
一個向量引用矩陣m的列index-th。

矩陣(Matrices)

定義 說明
matrix<T [, F, A]>
   m(size1, size2);
可變大小的T類型的密集矩陣(dense matrix)。 可以指定存儲類型A,缺省為unbounded_array。 orientation functor F 缺省為 row_major。 元素由 A構造, 不需要初始化自由的值。
bounded_matrix<T, M, N [, F]>
   m;
一個可變大小的T類型的密集矩陣(dense matrix)。最大大小為M-by-N。 orientation functor F 缺省為 row_major。缺省構造函數使用M-by-N大小來構造m。 元素由存儲類型 bounded_array來構造, 不需要初始化自身的值。
c_matrix<T, M, N>
   m(size1, size2);
給定大小的T類型的密集矩陣。 數據作為通常的 C++ 數組存儲:T data_[N][M]
vector_of_vector<T [, F, A]>
   m(size1, size2);
給定大小的T類型的密集矩陣(dense matrix)。 數據存儲為向量的向量(vector of vectors)。orientation F 缺省為row_major。存儲類型S缺省為 unbounded_array<unbounded_array<T> >
zero_matrix<T>
   m(size1, size2);
給定大小的T類型的零矩陣。
identity_matrix<T>
   m(size1, size2);
給定大小的T類型的identity matrix。 數值為 v(i,j) = (i==j)?T(1):T()
scalar_matrix<T>
   m(size1, size2, value);
給定大小的T類型的矩陣,每個元素的值都為value
triangular_matrix<T [, TRI, F, A]>
   m(size);
可變大小的T類型的三角矩陣。只有非零元素以給定的順序F存儲。 ("triangular packed storage") 。三角矩陣類型F缺省為lower, orientation type F缺省為row_major
banded_matrix<T [, F, A]>
   m(size1, size2, n_lower, n_upper);
可變大小的T類型的帶頭矩陣(banded matrix), n_lower下對角線(sub diagonals) 和n_upper上對角線(super diagonals)僅有非零元素以給定順序F存儲。 ("packed storage")
symmetric_matrix<T [, TRI, F, A]>
   m(size);
可變大小的T類型的對稱矩陣(symmetrix)。 僅有給定的三角矩陣(triangular matrix)以給定順序F存儲。
hermitian_matrix<T [, TRI, F, A]>
   m(size);
可變大小的T類型的埃爾米特矩陣(hermitian matrix)。 僅有給定的三角矩陣使用順序F存儲。
mapped_matrix<T, [F, S]>
   m(size1, size2 [, non_zeros]);
可變大小的T類型的稀疏矩陣(sparse matrix)。 存儲類型S可以是:std::map<size_t, std::map<size_t, T> >map_array<size_t, map_array<size_t, T> >.
sparse_vector_of_sparse_vector<T, [F, C]>
   m(size1, size2 [, non_zeros]);
可變大小的T類型的稀疏矩陣。
compressed_matrix<T, [F, IB, IA, TA]>
   m(size1, size2 [, non_zeros]);
可變大小的T類型的稀疏矩陣。 數組以 壓縮的行/列存儲(compressed row/column storage)。
coordinate_matrix<T, [F, IB, IA, TA]>
   m(size1, size2 [, non_zeros]);
可變大小的T類型的稀疏矩陣。 數值以3個並行數組( 3 parallel array )作為triples (i, j, value)存儲。對於第一對索引多於一個值是可能的, 實數值是所有的和。
generalized_vector_of_vector<T, F, A>
   m(size1, size2 [, non_zeros]);
可變大小的T類型的稀疏矩陣。 這些值作為一個稀疏向量(sparse vector)的向量存儲。例如, generalized_vector_of_vector<double, row_major, unbounded_array<coordinate_vector<double> > >

注意: 缺省類型定義在boost/numeric/ublas/fwd.hpp

矩陣代理(Matrix Proxies)

定義 說明
triangular_adaptor<MAT, TRI>
   ta(m);
一個三角矩陣引用矩陣m的部分元素。
symmetric_adaptor<MAT, TRI>
   sa(m);
一個對稱的矩陣引用矩陣m的部分元素。
hermitian_adaptor<MAT, TRI>
   ha(m);
一個埃爾米特矩陣(hermitian matrix)引用矩陣m的部分元素。
banded_adaptor<MAT>
   ba(m, n_lower, n_upper);
一個banded matrix引用矩陣m的部分元素。
matrix_range<MAT, TRI>
   mr(m, range1, range2);
一個矩陣引用矩陣m的子矩陣的元素。
matrix_slice<MAT, TRI>
   ms(m, slice1, slice2);
一個矩陣引用矩陣m中的非連續子矩陣。

特殊存儲佈局(Special Storage Layouts)

這個庫支持傳統的密集(dense), packed 和 基本的稀疏向量(basic sparse vector)和矩陣存儲佈局(matrix storage layouts)。下面描述了大多數通用的向量和矩陣的構造方法。

構造 註釋
vector<T,
 std::vector<T> >
  v (size)
一個密集向量(dense vector),由標準的vector來進行存儲。
這種存儲佈局通常與 BLAS 相兼容的。
vector<T,
 unbounded_array<T> >
  v (size)
一個密集向量(dense vector),由基於堆(heap-based)的數組提供存儲。
存儲佈局通常是 BLAS 兼容的。
vector<T,
 bounded_array<T, N> >
  v (size)
一個密集向量(dense vector),由基於棧(stack-based)的數組進行存儲。
這種存儲通常與 BLAS 兼容。
mapped_vector<T,
 std::map<std::size_t, T> >
  v (size, non_zeros)
稀疏向量(sparse vector),由標準的map進行存儲。
mapped_vector<T,
 map_array<std::size_t, T> >
  v (size, non_zeros)
稀疏向量(sparse vector),由映射數組(map array)進行存儲。
matrix<T,
 row_major,
 std::vector<T> >
  m (size1, size2)
密集矩陣(dense matrix),orientation 是行優先(row major),由標準的vector進行存儲。
matrix<T,
 column_major,
 std::vector<T> >
  m (size1, size2)
密集矩陣(dense matrix),orientation 是列優先(column major),由標準的vector存儲。
這種存儲佈局通常與 BLAS 兼容。
matrix<T,
 row_major,
 unbounded_array<T> >
  m (size1, size2)
一個密集矩陣(dense matrix), orientation 是行優先(row major),由基於堆(heap-based)的數組進行存儲。
matrix<T,
 column_major,
 unbounded_array<T> >
  m (size1, size2)
一個密集矩陣(dense matrix),orientation 是列優先(column major),由基於堆(heap-based)的數組進行存儲
這種存儲佈局通常與 BLAS 兼容。
matrix<T,
 row_major,
 bounded_array<T, N1 * N2> >
  m (size1, size2)
一個密集矩陣(dense matrix),orientation 是行優先(row major),由基於棧(stack-based)的數組進行存儲。
matrix<T,
 column_major,
 bounded_array<T, N1 * N2> >
  m (size1, size2)
一個密集矩陣(dense matrix),orientation 是列優先(column major),由基於棧(stack-based)的數組存儲。
這種存儲通常與 BLAS 兼容。
triangular_matrix<T,
 row_major, F, A>
  m (size)
一個 packed 三角矩陣(triangular matrix), orientation 是行優先(row major)。
triangular_matrix<T,
 column_major, F, A>
  m (size)
一個 packed 三角矩陣(triangular matrix),orientation 是列優先(column major)。
這種存儲通常與 BLAS 兼容。
banded_matrix<T,
 row_major, A>
  m (size1, size2, lower, upper)
一個 packed 三角矩陣(triangular matrix),orientation 是行優先(row major)。
banded_matrix<T,
 column_major, A>
  m (size1, size2, lower, upper)
一個packed 帶狀矩陣(banded matrix), orientation 是列優先(column major)。
這種存儲通常與 BLAS 兼容。
symmetric_matrix<T,
 row_major, F, A>
  m (size)
一個packed 對於矩陣(symmetric matrix),orientation 是行優先(row major)。
symmetric_matrix<T,
 column_major, F, A>
  m (size)
一個packed對稱矩陣(symmetric matrix),orientation 是列優先(column major)。
這種存儲通常與 BLAS 兼容。
hermitian_matrix<T,
 row_major, F, A>
  m (size)
一個packed的埃爾米特矩陣(hermitian matrix),orientation 是行優先(row major)。
hermitian_matrix<T,
 column_major, F, A>
  m (size)
一個packed埃爾米特矩陣(hermitian matrix),orientation 是列優先(column major)。
這種存儲通常與 BLAS 兼容。
mapped_matrix<T,
 row_major,
 std::map<std::size_t, T> >
  m (size1, size2, non_zeros)
一個稀疏矩陣(sparse matrix),orientation 是行優先(row major),由標準map提供存儲。
mapped_matrix<T,
 column_major,
 std::map<std::size_t, T> >
  m (size1, size2, non_zeros)
一個稀疏矩陣(sparse matrix),orientation 是列優先(column major),由標準map提供存儲。
mapped_matrix<T,
 row_major,
 map_array<std::size_t, T> >
  m (size1, size2, non_zeros)
一個稀疏矩陣(sparse matrix),orientation 是行優先(row major),由映射數組(map array)提供存儲。
mapped_matrix<T,
 column_major,
 map_array<std::size_t, T> >
  m (size1, size2, non_zeros)
一個稀疏矩陣(sparse matrix),orientation 是列優先(column major),由映射數組(map array)提供存儲。
compressed_matrix<T,
 row_major>
  m (size1, size2, non_zeros)
一個壓縮矩陣(compressed matrix),orientation 是行優先(row major)。
這種存儲通常與 BLAS 兼容。
compressed_matrix<T,
 column_major>
  m (size1, size2, non_zeros)
一個壓縮矩陣(compressed matrix),orientation 是列優先(column major)。
這種存儲通常與 BLAS 兼容。
coordinate_matrix<T,
 row_major>
  m (size1, size2, non_zeros)
一個coordinate matrix, orientation 是行優先(row major)。
這種存儲通常與 BLAS 兼容。
coordinate_matrix<T,
 column_major>
  m (size1, size2, non_zeros)
一個coordinate matrix, orientation 是列優先(column major)。
這種存儲通常與 BLAS 兼容。

Copyright (©) 2000-2004 Joerg Walter, Mathias Koch, Gunter Winkler, Michael Stevens
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 ).