矩阵和向量方法
矩阵和向量
矩阵是一个由双精度、浮点或复数组成的二维数组。
向量是一个由双精度、浮点或复数组成的一维数组。 向量没有指出它是垂直的还是水平的。 它的判定应来自应用的上下文。 例如,向量运算不会假设左侧向量是水平的,右侧向量是垂直的。 如果需要类型指示,则可以采用一行或一列的矩阵。 然而,这通常没有必要。
矩阵和向量为数据动态分配内存。 事实上,矩阵和向量是具有某些属性的对象,诸如它们包含的数据类型和维度。 矩阵和向量属性可以调用 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);
#importC++
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 | 返回给定矩阵/向量的副本 | 操纵 |
| Concat | 将两个子矩阵连接到一个矩阵。将两个向量连接到一个向量。 | 操纵 |
| 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 | 返回矩阵/向量元素,或沿指定轴的元素值的指定分位数 | 统计 |
| Random | 静态函数。创建并返回一个填充了随机值的新矩阵或向量。随机值在指定范围内均匀生成。 | 初始化 |
| 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 | 创建并返回一个新矩阵,填充零 | 初始化 |