操作矩阵和向量
在处理矩阵和向量时,基础操作可无需任何计算。矩阵专属方法提供在列表开头,而最后四个方法也适用于向量。
- Transpose:矩阵转置
- Col, Row, Diag:按编号提取和设置行、列和对角线
- TriL, TriU:按对角线编号获取上下三角矩阵
- SwapCols, SwapRows:按编号指示重新排列行和列
- Flat:按穿透索引设置及获取矩阵元素
- Reshape:原位调整矩阵形状
- Split, Hsplit, Vsplit:将矩阵拆分为若干子矩阵
- resize:原位调整矩阵或向量的大小;
- Compare, CompareByDigits:以给定实数精度比较两个矩阵或两个向量
- Sort:原位排序(元素置换)以及通过获取向量或矩阵索引来排序
- clip:原位限制元素值范围
请注意,未提供向量拆分。
下面是用于矩阵的原型方法。
matrix<T> matrix<T>::Transpose()
vector matrix<T>::Col∫Row(const ulong n)
void matrix<T>::Col∫Row(const vector v, const ulong n)
vector matrix<T>::Diag(const int n = 0)
void matrix<T>::Diag(const vector v, const int n = 0)
matrix<T> matrix<T>::TriL∫TriU(const int n = 0)
bool matrix<T>::SwapCols∫SwapRows(const ulong n1, const ulong n2)
T matrix<T>::Flat(const ulong i)
bool matrix<T>::Flat(const ulong i, const T value)
bool matrix<T>::Resize(const ulong rows, const ulong cols, const ulong reserve = 0)
void matrix<T>::Reshape(const ulong rows, const ulong cols)
ulong matrix<T>::Compare(const matrix<T> &m, const T epsilon)
ulong matrix<T>::CompareByDigits(const matrix &m, const int digits)
bool matrix<T>::Split(const ulong nparts, const int axis, matrix<T> &splitted[])
void matrix<T>::Split(const ulong &parts[], const int axis, matrix<T> &splitted[])
bool matrix<T>::Hsplit∫Vsplit(const ulong nparts, matrix<T> &splitted[])
void matrix<T>::Hsplit∫Vsplit(const ulong &parts[], matrix<T> &splitted[])
void matrix<T>::Sort(func_reference compare = NULL, T context)
void matrix<T>::Sort(const int axis, func_reference compare = NULL, T context)
matrix<T> matrix<T>::Sort(func_reference compare = NULL, T context)
matrix<T> matrix<T>::Sort(const int axis, func_reference compare = NULL, T context)
bool matrix<T>::Clip(const T min, const T max)
对于向量,有更小的方法集。
bool vector<T>::Resize(const ulong size, const ulong reserve = 0)
ulong vector<T>::Compare(const vector<T> &v, const T epsilon)
ulong vector<T>::CompareByDigits(const vector<T> &v, const int digits)
void vector<T>::Sort(func_reference compare = NULL, T context)
vector vector<T>::Sort(func_reference compare = NULL, T context)
bool vector<T>::Clip(const T min, const T max)
矩阵转置示例:
matrix a = {{0, 1, 2}, {3, 4, 5}};
|
使用 Diag 方法设置不同对角线的若干示例:
vector v1 = {1, 2, 3};
|
使用 Reshape 更改矩阵配置:
matrix matrix_a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
|
在 解方程时,我们将在一个示例中应用矩阵拆分为子矩阵。
Col 和 Row 方法不仅允许按其编号获取矩阵的列或行,而且允许原位将它们插入先前定义的矩阵。在此情况下,矩阵的维数或列向量(对于 Col 的情况)或行向量(对于 Row 的情况)以外元素的值均将不变。
如果这两个方法中的任一个应用于一个尚未设置其维数的矩阵,则将创建一个大小为 [N * M] 的空矩阵,其中以不同方式为 Col 和 Row 定义 N 和 M(基于向量的长度以及给定的列或行索引):
- 对于 Col,N 是列向量的长度,M 比插入列的指定索引大 1
- 对于 Row,N 比插入行的指定索引大 1,而 M 是行向量的长度
截止本章撰稿时,MQL5 还未提供用于成熟可靠的带后续元素扩展的行和列插入的方法,以及用于排除指定行和列的方法。