矩阵和向量

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

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

矩阵和向量为数据动态分配内存。 事实上,矩阵和向量是具有某些属性的对象,诸如它们包含的数据类型和维度。 矩阵和向量属性可以调用 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 flags, matrix<float> &C, const matrix<float> &A, const matrix<float> &B, ulong M, ulong N, ulong K, float alpha, float beta);

#import

C++

extern "C" __declspec(dllexport) bool sgemm(UINT flags, float *C, const float *A, const float *B, UINT64 M, UINT64 N, UINT64 K, float alpha, float 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 返回矩阵中的行数 特征
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 创建并返回一个新矩阵,填充零 初始化