矩阵和向量

向量类型是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)

eye

构造对角线为1,其他地方为0的矩阵

void matrix.Identity(const int rows)

identity

构造主对角线为1的矩形矩阵

void matrix.Ones(const int rows, const int cols)

ones

构造给定行和列的新矩阵,用1填充

void matrix.Zeros(const int rows, const int cols)

zeros

构造给定行和列的新矩阵,用零填充

void matrix.Full(const int rows, const int cols, const scalar value)

full

构造给定行和列的新矩阵,用标值填充

void matrix.Copy(const matrix a)

copy

构造给定矩阵的副本

void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)

frombuffer

构造从一维数组创建的矩阵

void matrix.FromFile(const int rows, condt int cols, const int file_handle, const int count=-1, const int offset=0)

fromfile

构造从文本或二进制文件创建的矩阵

void vector.FromString(const string source, const string sep=" ")

fromstring

构造从字符串中的文本数据初始化的向量

void vector.Arange(const scalar start, const scalar stop, const scalar step=1)

arange

构造给定的间隔内均匀间隔的值

void matrix.Diag(const vector v, const int ndiag=0)

diag

提取对角线或构造对角矩阵

void matrix.Tri(const int rows, const int cols, const int ndiag=0)

tri

构造在给定对角线处和给定对角线以下处为1,其他地方为0的矩阵

void matrix.Tril(const int rows, const int cols, const scalar array[], const int ndiag=0)

tril

返回矩阵副本,其中第k条对角线以上的元素归零

void matrix.Triu(const int rows, const int cols, const scalar array[], const int ndiag=0)

triu

返回矩阵副本,其中第k对角线以下的元素归零

void matrix.Vander(const vector v, const int cols=-1, const bool increasing=false)

vander

生成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()

transpose

反转或置换矩阵轴;返回修改后的矩阵

matrix matrix.Dot(const matrix b)

dot

两个矩阵的点积

matrix matrix.Inner(const matrix b)

inner

两个矩阵的内积

matrix matrix.Outer(const matrix b)

outer

计算两个矩阵的外积

matrix matrix.MatMul(const matrix b)

matmul

两个矩阵的矩阵乘积

matrix matrix.MatrixPower(const int power)

matrix_power

将矩形矩阵提升到(整数)n次方

matrix matrix.Kron(const matrix b)

kron

返回两个矩阵的Kronecker乘积

bool matrix.Cholesky(matrix& L)

cholesky

返回Cholesky分解

bool matrix.QR(matrix& Q, matrix& R)

qr

计算矩阵的qr因式分解

bool matrix.SVD(matrix& U, matrix& V, vector& singular_values)

svd

奇异值分解

bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values)

eig

计算矩形矩阵的特征值和右特征向量

bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values)

eigh

返回Hermitian矩阵的特征值和特征向量

bool matrix.EigVals(vector& eigen_values)

eigvals

计算一般矩阵的特征值

bool matrix.EigValsH(vector& eigen_values)

eigvalsh

计算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)

norm

返回矩阵或向量范数

double matrix.Cond(const norm)

cond

计算矩阵的条件数

vector matrix.Spectrum()

 

将矩阵的范围计算为来自AT*A乘积的特征值集合

double matrix.Det()

det

计算数组的行列式

int matrix.Rank()

matrix_rank

使用Gaussian方法返回数组的矩阵秩

int matrix.SLogDet(int& sign)

slogdet

计算数组行列式的符号和对数

double matrix.Trace()

trace

返回沿矩阵对角线的总和

vector matrix.Solve(const vector b)

solve

求解线性矩阵方程或线性代数方程组

vector matrix.LstSq(const vector b)

lstsq

返回线性代数方程组的最小平方解(对于非平方矩阵或退化矩阵)

matrix matrix.Inv()

inv

计算矩阵的(乘法)逆矩阵

matrix matrix.PInv()

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)

flat

允许通过一个索引而不是两个索引来寻址矩阵元素

double vector.ArgMax()

double matrix.ArgMax()

vector matrix.ArgMax(const int axis)

argmax

返回最大值的索引

double vector.ArgMin()

double matrix.ArgMin()

vector matrix.ArgMin(const int axis)

argmin

返回最小值的索引

double vector.Max()

double matrix.Max()

vector matrix.Max(const int axis)

max

返回矩阵/向量的最大值

double vector.Mean()

double matrix.Mean()

vector matrix.Mean(const int axis)

平均值

计算元素值的算术平均值

double vector.Min()

double matrix.Min()

vector matrix.Min(const int axis)

min

返回矩阵/向量的最小值

double vector.Sum()

double matrix.Sum()

vector matrix.Sum(const int axis)

sum

返回可以对给定轴(坐标轴)执行的矩阵/向量元素的和。

void vector.Clip(const double min_value,const double max_value)

void matrix.Clip(const double min_value,const double max_value)

clip

将矩阵/向量的元素限制在指定的有效值范围内

vector vector.CumProd()

vector matrix.CumProd()

matrix matrix.CumProd(const int axis)

cumprod

返回矩阵/向量元素的累积乘积,包括沿给定轴的元素

vector vector.CumSum()

vector matrix.CumSum()

matrix matrix.CumSum(const int axis)

cumsum

返回矩阵/向量元素的累积和,包括沿给定轴的元素

double vector.Prod(const double initial=1)

double matrix.Prod(const double initial=1)

vector matrix.Prod(const int axis,const double initial=1)

prod

返回可以对给定轴执行的矩阵/向量元素的乘积。

void matrix.Reshape(const ulong rows, const ulong cols)

reshape

改变矩阵的形状而不改变其数据

void matrix.Resize(const ulong rows,const ulong cols)

resize

返回已改变形状和大小的新矩阵

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)

ptp

返回矩阵/向量或给定矩阵轴的值范围,相当于Max() - Min()

double vector.Percentile(const int percent)

double matrix.Percentile(const int percent)

vector matrix.Percentile(const int percent,const int axis)

percentile

返回矩阵/向量元素值或沿指定轴的元素值的指定百分位数。'percent'参数的有效值在[0, 100]范围内

double vector.Quantile(const int percent)

double matrix.Quantile(const int percent)

vector matrix.Quantile(const int percent,const int axis)

quantile

返回矩阵/向量元素值或沿指定轴的元素值的指定分位数。'percent'参数的取值范围为[0, 1]

double vector.Median()

double matrix.Median()

vector matrix.Median(const int axis)

median

计算矩阵/向量元素的中位数。中位数是将数组/向量元素的最高半部分与元素的最低半部分分开的中间值。

double vector.Average()

double matrix.Average()

vector matrix.Average(const int axis)

average

计算矩阵/向量值的算术平均值。分母中权重之和不能等于0,但有些权重可以为0

double vector.Std()

double matrix.Std()

vector matrix.Std(const int axis)

std

返回矩阵/向量元素值或沿给定轴的元素值的标准偏差

double vector.Var()

double matrix.Var()

vector matrix.Var(const int axis)

var

计算矩阵/向量元素值的方差

double vector.CorrCoef(const vector& v)

matrix matrix.CorrCoef()

corrcoef

计算Pearson相关系数(线性相关系数)。相关系数在[-1, 1]范围内

vector vector.Correlate(const vector& v,enum mode)

correlate

计算两个向量的交叉相关。'mode'参数决定线性卷积计算模式

vector vector.Convolve(const vector& v, enum mode)

convolve

返回两个向量的离散、线性卷积 'mode'参数决定线性卷积计算模式

matrix matrix.Cov()

matrix vector.Cov(const vector& v); (resulting matrix 2 x 2)

cov

计算协方差矩阵。两个样本(两个随机变量)的协方差是衡量它们线性相关性的指标