矩阵和向量

矩阵是一个由双精度、浮点或复数组成的二维数组。

向量是一个由双精度、浮点或复数组成的一维数组。 向量没有指出它是垂直的还是水平的。 它的判定应来自应用的上下文。 例如,向量运算不会假设左侧向量是水平的,右侧向量是垂直的。 如果需要类型指示,则可以采用一行或一列的矩阵。 然而,这通常没有必要。

矩阵和向量为数据动态分配内存。 事实上,矩阵和向量是具有某些属性的对象,诸如它们包含的数据类型和维度。 矩阵和向量属性可以调用 vector_a.Size()、Matrix_b.Rows()、vector_c.Norm()、matrix_d.Cond() 等方法获取。 任何维度都可以更改。

在创建和初始化矩阵时,采用的是所谓的静态方法(这些方法就像类的静态方法)。 例如: matrix::Eye(), matrix::Identity(), matrix::Ones(), vector::Ones(), matrix: :Zeros(), vector::Zeros(), matrix::Full(), vector::Full(), matrix::Tri()。

此刻,矩阵和向量运算并不意味着运用复杂的数据类型,因为这一发展方向尚未完成。

MQL5 支持将矩阵和向量传递至 DLL。 这样就能够从外部变量导入相关类型的函数。

矩阵和向量以指向缓冲区的指针形式被传递到 DLL。 例如,若要传递浮点类型的矩阵,从 DLL 导出的函数,其相应参数必须采用浮点类型的缓冲区指针。

MQL5

#import "mmlib.dll"
bool sgemm(uint flagsmatrix<float> &C, const matrix<float> &A, const matrix<float> &Bulong Mulong Nulong Kfloat alphafloat beta);
#import

C++

extern "C" __declspec(dllexportbool sgemm(UINT flagsfloat *Cconst float *Aconst float *BUINT64 MUINT64 NUINT64 Kfloat alphafloat beta)

除了缓冲区之外,还应该传递矩阵和向量的大小,方可进行正确处理。

下面按字母顺序列出了所有矩阵和向量方法。

函数

动作

分类

Activation

计算激活函数值,并将其写入传递的向量/矩阵

机器学习

ArgMax

返回最大值的索引

统计

ArgMin

返回最小值的索引

统计

ArgSort

返回排序后的索引

操纵

Assign

复制矩阵、向量或数组,并自动转换

初始化

Average

计算矩阵/向量值的加权平均值

统计

Cholesky

计算乔列斯基(Cholesky)分解

变换

Clip

将矩阵/向量的元素限定到给定的有效值范围

操纵

Col

返回列向量。 将向量写入指定的列。

操纵

Cols

返回矩阵中的列数

特征

Compare

以指定的精度比较两个矩阵/向量的元素

操纵

CompareByDigits

将两个矩阵/向量的元素按有效数字精度进行比较

操纵

Cond

计算一个矩阵的条件数

特征

Convolve

返回两个向量的离散线性卷积

乘积

Copy

返回给定矩阵/向量的副本

操纵

CopyIndicatorBuffer

将指定数量中指定指标缓冲区的数据获取到向量

初始化

CopyRates

获取指定品种、周期、数量的历史序列,格式为 MqlRates 结构,并存储到矩阵或向量

初始化

CopyTicks

MqlTick 结构获取跳价,存储到矩阵或向量中

初始化

CopyTicksRange

MqlTick 结构获取跳价,以指定数据范围存储到矩阵或向量中

初始化

CorrCoef

计算皮尔逊(Pearson)相关系数(线性相关系数)

乘积

Correlate

计算两个向量的互相关性

乘积

Cov

计算协方差矩阵

乘积

CumProd

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

统计

CumSum

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

统计

Derivative

计算激活函数导数值,并将其写入所传递的向量/矩阵

机器学习

Det

计算平方可逆矩阵的行列式

特征

Diag

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

操纵

Dot

两个向量的点积

乘积

Eig

计算方阵的本征值和右本征向量

变换

EigVals

计算一般矩阵的本征值

变换

Eye

返回一个矩阵,对角线上为 1,其它地方为 0

初始化

Fill

用指定值填充现有矩阵或向量

初始化

Flat

通过一个索引替代两个索引访问矩阵元素

操纵

Full

创建并返回新矩阵,并以给定值填充

初始化

GeMM

GeMM(通用矩阵乘法)方法实现了两个矩阵的一般乘法

乘积

HasNan

返回矩阵/向量中NaN值的数量

操纵

Hsplit

将矩阵水平拆分为多个子矩阵。 与 axis=0 的拆分相同

操纵

Identity

创建指定大小的单位矩阵

初始化

Init

矩阵或向量初始化

初始化

Inner

两个矩阵的内积

乘积

Inv

用乔丹-高斯(Jordan-Gauss)方法计算平方可逆矩阵的乘法逆

解法

Kron

返回两个矩阵、矩阵和向量,向量和矩阵、或两个向量的克罗内克(Kronecker)乘积

乘积

LinearRegression

计算包含计算的线性回归值的向量/矩阵

统计

Loss

计算损失函数值,并将其写入所传递的向量/矩阵

机器学习

LstSq

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

解法

LU

实现矩阵的 LU 分解:下三角矩阵和上三角矩阵的乘积

变换

LUP

以部分排列实现 LUP 分解,这仅指具有行排列的 LU 分解:PA=LU

变换

MatMul

两个矩阵的矩阵乘积

乘积

Max

返回矩阵/向量中的最大值

统计

Mean

计算元素值的算术平均值

统计

Median

计算矩阵/向量元素的中位数

统计

Min

返回矩阵/向量中的最小值

统计

Norm

返回矩阵或向量范数

特征

Ones

创建并返回一个新矩阵,其中以 1 填充

初始化

Outer

计算两个矩阵或两个向量的外积

乘积

Percentile

返回矩阵/向量元素,或沿指定轴的元素值的指定百分位数

统计

PInv

遵照摩尔-彭罗斯(Moore-Penrose)方法计算矩阵的伪逆

解法

Power

将方阵提高整数幂

乘积

Prod

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

统计

Ptp

返回矩阵/向量或给定矩阵轴的数值范围

统计

QR

计算矩阵的 QR 分解

变换

Quantile

返回矩阵/向量元素,或沿指定轴的元素值的指定分位数

统计

Rank

返回利用高斯(Gaussian)方法的矩阵秩

特征

RegressionMetric

在指定数据数组上构建回归线,并计算回归量程作为偏差误差

统计

Reshape

在不更改矩阵数据的情况下更改矩阵的形状

操纵

Resize

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

操纵

Row

返回行向量。 将向量写入指定行

操纵

Rows

返回矩阵中的行数

特征

Set

根据指定索引设置向量元素值

操纵

Size

返回向量的大小

特征

SLogDet

计算矩阵行列式的符号和对数

特征

Solve

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

解法

Sort

按位置排序

操纵

Spectrum

计算矩阵的谱作为其本征值的集合,来自乘积 AT*A

特征

Split

将矩阵拆分为多个子矩阵

操纵

Std

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

统计

Sum

返回矩阵/矢量元素的总和,也可以针对给定的轴(多轴)执行

统计

SVD

奇异值分解

变换

SwapCols

交换矩阵中的列

操纵

SwapRows

交换矩阵中的行

操纵

Trace

返回矩阵对角线的总和

特征

Transpose

转置(轴交换)并返回修改后的矩阵

操纵

Tri

构造一个矩阵,在指定的对角线上及以下为 1,在其它地方为零

初始化

TriL

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

操纵

TriU

返回矩阵的副本,其中第 k 个对角线下方的元素归零。 上三角矩阵

操纵

Var

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

统计

Vsplit

将矩阵垂直拆分为多个子矩阵。 axis=1 的拆分相同

操纵

Zeros

创建并返回一个新矩阵,填充零

初始化