矩阵和向量
矩阵是一个由双精度、浮点或复数组成的二维数组。
向量是一个由双精度、浮点或复数组成的一维数组。 向量没有指出它是垂直的还是水平的。 它的判定应来自应用的上下文。 例如,向量运算不会假设左侧向量是水平的,右侧向量是垂直的。 如果需要类型指示,则可以采用一行或一列的矩阵。 然而,这通常没有必要。
矩阵和向量为数据动态分配内存。 事实上,矩阵和向量是具有某些属性的对象,诸如它们包含的数据类型和维度。 矩阵和向量属性可以调用 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"
|
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) |
除了缓冲区之外,还应该传递矩阵和向量的大小,方可进行正确处理。
下面按字母顺序列出了所有矩阵和向量方法。
函数 |
动作 |
分类 |
---|---|---|
计算激活函数值,并将其写入传递的向量/矩阵 |
||
返回最大值的索引 |
||
返回最小值的索引 |
||
返回排序后的索引 |
||
复制矩阵、向量或数组,并自动转换 |
||
计算矩阵/向量值的加权平均值 |
||
计算乔列斯基(Cholesky)分解 |
||
将矩阵/向量的元素限定到给定的有效值范围 |
||
返回列向量。 将向量写入指定的列。 |
||
返回矩阵中的列数 |
||
以指定的精度比较两个矩阵/向量的元素 |
||
将两个矩阵/向量的元素按有效数字精度进行比较 |
||
计算一个矩阵的条件数 |
||
返回两个向量的离散线性卷积 |
||
返回给定矩阵/向量的副本 |
||
获取指定品种、周期、数量的历史序列,格式为 MqlRates 结构,并存储到矩阵或向量 |
||
从 MqlTick 结构获取跳价,存储到矩阵或向量中 |
||
从 MqlTick 结构获取跳价,以指定数据范围存储到矩阵或向量中 |
||
计算皮尔逊(Pearson)相关系数(线性相关系数) |
||
计算两个向量的互相关性 |
||
计算协方差矩阵 |
||
返回矩阵/向量元素的累积乘积,包括沿给定轴的累积乘积 |
||
返回矩阵/矢量元素的累积总和,包括沿给定轴的矩阵/矢量元素 |
||
计算激活函数导数值,并将其写入所传递的向量/矩阵 |
||
计算平方可逆矩阵的行列式 |
||
提取对角线或构造对角矩阵 |
||
两个向量的点积 |
||
计算方阵的本征值和右本征向量 |
||
计算一般矩阵的本征值 |
||
返回一个矩阵,对角线上为 1,其它地方为 0 |
||
用指定值填充现有矩阵或向量 |
||
通过一个索引替代两个索引访问矩阵元素 |
||
创建并返回新矩阵,并以给定值填充 |
||
GeMM(通用矩阵乘法)方法实现了两个矩阵的一般乘法 |
||
返回矩阵/向量中NaN值的数量 |
||
将矩阵水平拆分为多个子矩阵。 与 axis=0 的拆分相同 |
||
创建指定大小的单位矩阵 |
||
矩阵或向量初始化 |
||
两个矩阵的内积 |
||
用乔丹-高斯(Jordan-Gauss)方法计算平方可逆矩阵的乘法逆 |
||
返回两个矩阵、矩阵和向量,向量和矩阵、或两个向量的克罗内克(Kronecker)乘积 |
||
计算包含计算的线性回归值的向量/矩阵 |
||
计算损失函数值,并将其写入所传递的向量/矩阵 |
||
返回线性代数方程的最小二乘解(对于非二乘或退化矩阵) |
||
实现矩阵的 LU 分解:下三角矩阵和上三角矩阵的乘积 |
||
以部分排列实现 LUP 分解,这仅指具有行排列的 LU 分解:PA=LU |
||
两个矩阵的矩阵乘积 |
||
返回矩阵/向量中的最大值 |
||
计算元素值的算术平均值 |
||
计算矩阵/向量元素的中位数 |
||
返回矩阵/向量中的最小值 |
||
返回矩阵或向量范数 |
||
创建并返回一个新矩阵,其中以 1 填充 |
||
计算两个矩阵或两个向量的外积 |
||
返回矩阵/向量元素,或沿指定轴的元素值的指定百分位数 |
||
遵照摩尔-彭罗斯(Moore-Penrose)方法计算矩阵的伪逆 |
||
将方阵提高整数幂 |
||
返回矩阵/向量元素的乘积,也可以针对给定轴执行 |
||
返回矩阵/向量或给定矩阵轴的数值范围 |
||
计算矩阵的 QR 分解 |
||
返回矩阵/向量元素,或沿指定轴的元素值的指定分位数 |
||
返回利用高斯(Gaussian)方法的矩阵秩 |
||
在指定数据数组上构建回归线,并计算回归量程作为偏差误差 |
||
在不更改矩阵数据的情况下更改矩阵的形状 |
||
返回形状和大小均已更改的新矩阵 |
||
返回行向量。 将向量写入指定行 |
||
返回矩阵中的行数 |
||
根据指定索引设置向量元素值 |
||
返回向量的大小 |
||
计算矩阵行列式的符号和对数 |
||
求解线性矩阵方程或线性代数方程组 |
||
按位置排序 |
||
计算矩阵的谱作为其本征值的集合,来自乘积 AT*A |
||
将矩阵拆分为多个子矩阵 |
||
返回矩阵/向量元素,或沿指定轴的元素值的标准偏差 |
||
返回矩阵/矢量元素的总和,也可以针对给定的轴(多轴)执行 |
||
奇异值分解 |
||
交换矩阵中的列 |
||
交换矩阵中的行 |
||
返回矩阵对角线的总和 |
||
转置(轴交换)并返回修改后的矩阵 |
||
构造一个矩阵,在指定的对角线上及以下为 1,在其它地方为零 |
||
返回矩阵的副本,其中第 k 个对角线以上的元素归零。 下三角矩阵 |
||
返回矩阵的副本,其中第 k 个对角线下方的元素归零。 上三角矩阵 |
||
计算矩阵/向量元素值的方差 |
||
将矩阵垂直拆分为多个子矩阵。 axis=1 的拆分相同 |
||
创建并返回一个新矩阵,填充零 |