矩阵 matrix <boost/numeric/ublas/matrix.hpp>
密集矩阵模板类
matrix<T, F, A>
模板参数
参数 | 说明 | 缺省值 |
T | 存储在对象的类型。 | |
F | 描述存储组织的函数对象。 | row_major |
A | 存储数组。 | unbounded_array<std::size_t> |
例子:
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;
std::cout << m << std::endl;
常用函数
size_type size1() //m,高
size_type size2() //n,宽
array_type& date() //返回数据
void resize(size_type size1, size_type size2, bool preserve = true) //重新分配大小
void erase_element (size_type i, size_type j) //删除第i行j列元素
Identity Matrix
模板类 identity_matrix<T, ALLOC>,构造单位数组,即当i=j时值为1,其它情况为0。
例子:
matrix<double> m (3); // 3*3的单位数组
Zero Matrix
模板类zero_matrix<T, ALLOC>,零矩阵。
Scalar Matrix
模板类zero_matrix<T,ALLOC>,标量矩阵,全1矩阵。
矩阵策略 <boost/numeric/ublas/matrix_proxy.hpp>
矩阵行
matrix_row<M>,允许定位矩阵中的一行。
例子:
matrix<double> m(3, 3);
matrix_row<matrix<double> > mr(m, 1);
自由函数
template<class M>
matrix_row<M> row (M &data, std::size_t i); //返回row
矩阵列
matrix_column<M>,允许定位矩阵的一列。
例子:
matrix<double> m(3, 3);
matrix_column<matrix<double> > mc(m, 1);
自由函数
template<class M>
matrix_column<M> column (M &data, std::size_t j);
向量切分
模板类matrix_vector_slice<M> 允许定位一个矩阵中被切分的一个子向量。
构造函数
matrix_vector_slice (matrix_type &data, const slice &s1, const slice &s2)
自由函数:
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);
向量范围
模板类matrix_vector_range<M>允许定位矩阵的一个子向量。
构造函数
matrix_vector_range(matrix_type &date, const range& r1, const range& r2)
矩阵范围
模板类matrix_range<M>允许定位矩阵的子矩阵。
matrix_range(matrix_type &date, const range& r1, const range& r2)
自由函数
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>
matrix_range<M> project (M &data, const range &r1, const range &r2);
矩阵表示
一元运算
typedef template<class E> typename
matrix_unary1_traits<E, scalar_negate<typename E::value_type> >::result_type R;
typdef const matrix_expression<E> A;
R operator – (A &e) //负号
R conj(A& e) //共轭
R real(A& e) //计算实部
R imag(A& e) //计算虚部
R trans(A& e)
R herm(A& e)
二元运算
R operator +
R operator –
标量运算
R operator *
R operatro /
R prod(A &e1, A &e2)
R prec_prod(A &e1, A &e2)
R solve(A &e1, A &e2, C)
/*
* 因为太麻烦了,所以连翻译的人都不想翻译了
*/
范围和切分存储 <boost/numeric/ublas/storage.hpp>
Range
指定一个范围。这个范围是从一个起始值到一个终止值的索引的序列,索引以1的步进来增加并不包含最后一个终止值。
例子:
range r (0, 3); // range (size_type start, size_type stop)
r.start();
r.size();
Slice
是范围的一般化,允许指定步进值来增加和减少。
例子:
slice s (0, 1, 3); //slice (size_type start, size_type stride, size_type size),stride步进
From: http://hi.baidu.com/ani_di/blog/item/2f620ed2c22b6d0a3af3cfae.html