文章目录
MathNet系列:矩阵生成
安装
MathNet.Numerics中提供了线性代数、微积分、特殊函数、概率论、随机函数、插值、最优化等一系列功能,是.net技术中首选的数值计算包。
其中,线性代数包LinearAlgebra包提供了向量、矩阵等数据结构,这些是数值计算的前提,故而相比于其他包更加基础。
下面用VS新建一个控制台项目,并启用顶级语句。点击工具->NuGet包管理器->管理解决方案的NuGet程序包,进入浏览选项卡,搜索MathNet.Numerics,选中安装。
索引和计算
MathNet并未重载索引运算符,而是通过At方法来索引。但矩阵重载了许多运算符,支持加减法以及矩阵乘法运算。需要注意,*是矩阵乘法,而非对应元素的乘法。
Matrix也封装了常见运算的方法,以加法为例,提供了两种方案,一是直接返回一个矩阵,二是实现一个void方法,通过传地址的方式,更改输入的另一个矩阵。示例如下
cs
using MathNet.Numerics.LinearAlgebra;
Matrix<double> m = Matrix<double>.Build.Dense(3, 4, 0.5);
Matrix<double> n = Matrix<double>.Build.Dense(3, 4, 0.8);
Matrix<double> p = Matrix<double>.Build.Dense(3, 4);
Console.WriteLine(m.Add(n));
m.Add(n, p);
其中,m.Add(n)返回m+n;m.Add(n, p)则相当于p=m+n。
Matrix封装了一些乘除法,其调用逻辑与Add相似,列举如下
- Multiply 矩阵乘法
- PointwiseMultiply 逐点相乘
- LeftMultiply 向量左乘,返回一个向量
- Divide 除以某个数
- DivideByThis 除某个数
- PointwiseDivide 逐点相除
- PointwiseRemainder 逐点求余
- PointwiseModulus 逐点取模
- Power 乘方
- PointwisePower 逐点乘方
逐点计算
Matrix中提供了一大批Pointwise开头的方法,用于点对点的计算
PointwiseAbsoluteMaximum | 返回绝较大的对值值 |
PointwiseAbsoluteMinimum | 返回绝较小的对值值 |
三角函数 | PointwiseCos, PointwiseSin, PointwiseTan |
反三角函数 | PointwiseAcos, PointwiseAsin, PointwiseAtan |
双曲函数 | PointwiseCosh, PointwiseSinh, PointwiseTanh |
取整 | PointwiseCeiling, PointwiseFloor, PointwiseRound |
指数对数 | PointwiseExp, PointwiseLog, PointwiseLog10 |
比大小 | PointwiseMaximum, PointwiseAbsoluteMaximum PointwiseMinimum, PointwiseAbsoluteMinimum |
开根号 | PointwiseSqrt |
静态方法
Matrix类中封装了一些静态方法,除了绝对值Abs,开根号Sqrt之外,还有如下
类别 | 函数 |
---|---|
三角函数 | Cos, Sin, Tan |
反三角函数 | Acos, Asin, Atan |
双曲函数 | Cosh, Sinh, Tanh |
指数对数 | Exp, Log, Log10, |
取整 | Ceiling, Floor, Round |
以指数函数示例如下
cs
using MathNet.Numerics.LinearAlgebra;
using System.Runtime.InteropServices;
Matrix<double> m = Matrix<double>.Build.Dense(3, 4, 0.5);
Console.WriteLine(m);
Console.WriteLine(Matrix<double>.Exp(m));
/*
DenseMatrix 3x4-Double
0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5
DenseMatrix 3x4-Double
1.64872 1.64872 1.64872 1.64872
1.64872 1.64872 1.64872 1.64872
1.64872 1.64872 1.64872 1.64872
*/