矩阵和向量
向量类型是MQL5中的一种特殊数据类型,它支持向量运算。向量是double类型的一维数组。它是线性代数的基本概念之一,应用于多个科学领域,包括物理学、几何学等。向量用于求解线性方程组、3D图形和其他应用领域。向量可以相加和相乘。向量之间的长度或距离可以通过范数获得。在编程中,向量通常用同构元素的数组表示,这些数组可能没有规则的向量运算,即数组不能相加或相乘时,它们没有范数。
使用矩阵时,向量可以表示为行向量和字符串向量。此外,线性代数中的向量使用协方差和逆变的概念。这些概念在编写MQL5代码时没有任何区别,因为只有程序员能决定每个向量类型的对象。例如,它可以是3D图形中的旋转、位移或压缩向量。
一般来说,从线性代数的角度来看,一个数也是一个向量,只不过是在一维向量空间中。向量本身可以被认为是矩阵的特例。
矩阵类型是MQL5中的另一种特殊数据类型,用于表示矩阵。矩阵实际上是double类型的二维数组。向量和矩阵已被引入MQL5,以便更轻松地对某些类型的数据集进行运算。通过向量和矩阵,开发人员可以以简单且类似于数学的形式从线性代数的可能性中受益。矩阵可用来更简洁地写出线性方程组或微分方程组。矩阵行数对应方程数,而列数等于未知数的个数。因此,线性方程组可以通过矩阵运算来求解。
为矩阵定义以下代数运算:
- 添加相同大小的矩阵
- 合适大小矩阵的乘法:左矩阵的列数必须等于右矩阵的行数
- 矩阵乘以列向量;根据矩阵乘法规则将行向量乘以矩阵。在这个意义上,向量是矩阵的特例
- 矩阵乘以一个数字,也就是标量
数学考虑了许多不同的矩阵类型。例如单位矩阵、对称矩阵、斜对称矩阵、上下三角矩阵等。 各种规范形式在矩阵理论中扮演着重要的角色。它们代表矩阵的某种规范形式,可以通过某些变换来获得。在实践中,使用具有附加属性(例如稳定性)的规范形式。
使用向量和矩阵,或者更确切地说,使用相关类型的特殊方法,可以创建更简单、更简洁和更清晰的代码,这接近于数学符号。使用这些方法,您可以避免创建嵌套循环或在计算中注意正确索引数组。因此,使用这些方法可以提高开发复杂程序的可靠性和速度。
矩阵和向量方法列表
矩阵和向量类型包括对应于相关NumPy程序库方法的方法。使用这些方法,您可以轻松地将算法和代码从Python转换为MQL5。许多数据处理任务、数学方程、神经网络和机器学习任务都可以使用现有的Python方法和程序库来解决。
方法矩阵/向量 |
NumPy中的类似方法 |
描述 |
---|---|---|
void matrix.Eye(const int rows, const int cols, const int ndiag=0) |
构造对角线为1,其他地方为0的矩阵 |
|
void matrix.Identity(const int rows) |
构造主对角线为1的矩形矩阵 |
|
void matrix.Ones(const int rows, const int cols) |
构造给定行和列的新矩阵,用1填充 |
|
void matrix.Zeros(const int rows, const int cols) |
构造给定行和列的新矩阵,用零填充 |
|
void matrix.Full(const int rows, const int cols, const scalar value) |
构造给定行和列的新矩阵,用标值填充 |
|
void matrix.Copy(const matrix a) |
构造给定矩阵的副本 |
|
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) |
构造从一维数组创建的矩阵 |
|
void matrix.FromFile(const int rows, condt int cols, const int file_handle, const int count=-1, const int offset=0) |
构造从文本或二进制文件创建的矩阵 |
|
void vector.FromString(const string source, const string sep=" ") |
构造从字符串中的文本数据初始化的向量 |
|
void vector.Arange(const scalar start, const scalar stop, const scalar step=1) |
构造给定的间隔内均匀间隔的值 |
|
void matrix.Diag(const vector v, const int ndiag=0) |
提取对角线或构造对角矩阵 |
|
void matrix.Tri(const int rows, const int cols, const int ndiag=0) |
构造在给定对角线处和给定对角线以下处为1,其他地方为0的矩阵 |
|
void matrix.Tril(const int rows, const int cols, const scalar array[], const int ndiag=0) |
返回矩阵副本,其中第k条对角线以上的元素归零 |
|
void matrix.Triu(const int rows, const int cols, const scalar array[], const int ndiag=0) |
返回矩阵副本,其中第k对角线以下的元素归零 |
|
void matrix.Vander(const vector v, const int cols=-1, const bool increasing=false) |
生成Vandermonde矩阵 |
|
vector matrix.Row(const unsigned nrow) |
|
返回行向量 |
vector matrix.Col(const unsigned ncol) |
|
返回列向量 |
unsigned matrix.Rows() |
|
返回矩阵中的行数 |
unsigned matrix.Cols() |
|
返回矩阵中的列数 |
void matrix.Init() |
|
初始化矩阵 |
matrix matrix.Transpose() |
反转或置换矩阵轴;返回修改后的矩阵 |
|
matrix matrix.Dot(const matrix b) |
两个矩阵的点积 |
|
matrix matrix.Inner(const matrix b) |
两个矩阵的内积 |
|
matrix matrix.Outer(const matrix b) |
计算两个矩阵的外积 |
|
matrix matrix.MatMul(const matrix b) |
两个矩阵的矩阵乘积 |
|
matrix matrix.MatrixPower(const int power) |
将矩形矩阵提升到(整数)n次方 |
|
matrix matrix.Kron(const matrix b) |
返回两个矩阵的Kronecker乘积 |
|
bool matrix.Cholesky(matrix& L) |
返回Cholesky分解 |
|
bool matrix.QR(matrix& Q, matrix& R) |
计算矩阵的qr因式分解 |
|
bool matrix.SVD(matrix& U, matrix& V, vector& singular_values) |
奇异值分解 |
|
bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values) |
计算矩形矩阵的特征值和右特征向量 |
|
bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values) |
返回Hermitian矩阵的特征值和特征向量 |
|
bool matrix.EigVals(vector& eigen_values) |
计算一般矩阵的特征值 |
|
bool matrix.EigValsH(vector& eigen_values) |
计算Hermitian矩阵的特征值 |
|
bool matrix.LU(matrix& L, matrix& U) |
|
将矩阵LU分解为一个下三角形矩阵和上三角形矩阵的乘积 |
bool matrix.LUP(matrix& L, matrix& U, matrix& P) |
|
带部分枢轴的LUP分解,仅指带行排列的LU分解:PA=LU |
double matrix.Norm(const norm) |
返回矩阵或向量范数 |
|
double matrix.Cond(const norm) |
计算矩阵的条件数 |
|
vector matrix.Spectrum() |
|
将矩阵的范围计算为来自AT*A乘积的特征值集合 |
double matrix.Det() |
计算数组的行列式 |
|
int matrix.Rank() |
使用Gaussian方法返回数组的矩阵秩 |
|
int matrix.SLogDet(int& sign) |
计算数组行列式的符号和对数 |
|
double matrix.Trace() |
返回沿矩阵对角线的总和 |
|
vector matrix.Solve(const vector b) |
求解线性矩阵方程或线性代数方程组 |
|
vector matrix.LstSq(const vector b) |
返回线性代数方程组的最小平方解(对于非平方矩阵或退化矩阵) |
|
matrix matrix.Inv() |
计算矩阵的(乘法)逆矩阵 |
|
matrix matrix.PInv() |
通过Moore-Penrose方法计算矩阵的伪逆 |
|
int matrix.Compare(const matrix matrix_c, const double epsilon) int matrix.Compare(const matrix matrix_c, const int digits) int vector.Compare(const vector vector_c, const double epsilon) int vector.Compare(const vector vector_c, const int digits) |
|
以指定精度比较两个矩阵/向量的元素 |
double matrix.Flat(const ulong index) bool matrix.Flat(const ulong index,const double value) |
允许通过一个索引而不是两个索引来寻址矩阵元素 |
|
double vector.ArgMax() double matrix.ArgMax() vector matrix.ArgMax(const int axis) |
返回最大值的索引 |
|
double vector.ArgMin() double matrix.ArgMin() vector matrix.ArgMin(const int axis) |
返回最小值的索引 |
|
double vector.Max() double matrix.Max() vector matrix.Max(const int axis) |
返回矩阵/向量的最大值 |
|
double vector.Mean() double matrix.Mean() vector matrix.Mean(const int axis) |
计算元素值的算术平均值 |
|
double vector.Min() double matrix.Min() vector matrix.Min(const int axis) |
返回矩阵/向量的最小值 |
|
double vector.Sum() double matrix.Sum() vector matrix.Sum(const int axis) |
返回可以对给定轴(坐标轴)执行的矩阵/向量元素的和。 |
|
void vector.Clip(const double min_value,const double max_value) void matrix.Clip(const double min_value,const double max_value) |
将矩阵/向量的元素限制在指定的有效值范围内 |
|
vector vector.CumProd() vector matrix.CumProd() matrix matrix.CumProd(const int axis) |
返回矩阵/向量元素的累积乘积,包括沿给定轴的元素 |
|
vector vector.CumSum() vector matrix.CumSum() matrix matrix.CumSum(const int axis) |
返回矩阵/向量元素的累积和,包括沿给定轴的元素 |
|
double vector.Prod(const double initial=1) double matrix.Prod(const double initial=1) vector matrix.Prod(const int axis,const double initial=1) |
返回可以对给定轴执行的矩阵/向量元素的乘积。 |
|
void matrix.Reshape(const ulong rows, const ulong cols) |
改变矩阵的形状而不改变其数据 |
|
void matrix.Resize(const ulong rows,const ulong cols) |
返回已改变形状和大小的新矩阵 |
|
bool matrix.SwapRows(const ulong row1, const ulong row2) |
|
交换矩阵中的行 |
bool matrix.SwapCols(const ulong col1, const ulong col2) |
|
交换矩阵中的列 |
double vector.Ptp() double matrix.Ptp() vector matrix.Ptp(const int axis) |
返回矩阵/向量或给定矩阵轴的值范围,相当于Max() - Min() |
|
double vector.Percentile(const int percent) double matrix.Percentile(const int percent) vector matrix.Percentile(const int percent,const int axis) |
返回矩阵/向量元素值或沿指定轴的元素值的指定百分位数。'percent'参数的有效值在[0, 100]范围内 |
|
double vector.Quantile(const int percent) double matrix.Quantile(const int percent) vector matrix.Quantile(const int percent,const int axis) |
返回矩阵/向量元素值或沿指定轴的元素值的指定分位数。'percent'参数的取值范围为[0, 1] |
|
double vector.Median() double matrix.Median() vector matrix.Median(const int axis) |
计算矩阵/向量元素的中位数。中位数是将数组/向量元素的最高半部分与元素的最低半部分分开的中间值。 |
|
double vector.Average() double matrix.Average() vector matrix.Average(const int axis) |
计算矩阵/向量值的算术平均值。分母中权重之和不能等于0,但有些权重可以为0 |
|
double vector.Std() double matrix.Std() vector matrix.Std(const int axis) |
返回矩阵/向量元素值或沿给定轴的元素值的标准偏差 |
|
double vector.Var() double matrix.Var() vector matrix.Var(const int axis) |
计算矩阵/向量元素值的方差 |
|
double vector.CorrCoef(const vector& v) matrix matrix.CorrCoef() |
计算Pearson相关系数(线性相关系数)。相关系数在[-1, 1]范围内 |
|
vector vector.Correlate(const vector& v,enum mode) |
计算两个向量的交叉相关。'mode'参数决定线性卷积计算模式 |
|
vector vector.Convolve(const vector& v, enum mode) |
返回两个向量的离散、线性卷积 'mode'参数决定线性卷积计算模式 |
|
matrix matrix.Cov() matrix vector.Cov(const vector& v); (resulting matrix 2 x 2) |
计算协方差矩阵。两个样本(两个随机变量)的协方差是衡量它们线性相关性的指标 |