【C#】MathNet矩阵计算

文章目录

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
*/
相关推荐
hixiong1232 小时前
C# OpenCVSharp实现Hand Pose Estimation Mediapipe
开发语言·opencv·ai·c#·手势识别
集成显卡2 小时前
AI取名大师 | PM2 部署 Bun.js 应用及配置 Let‘s Encrypt 免费 HTTPS 证书
开发语言·javascript·人工智能
AI小云2 小时前
【Numpy数据运算】数组间运算
开发语言·python·numpy
baivfhpwxf20232 小时前
SQL Server 服务端如何在其他电脑连接
c#
是苏浙3 小时前
零基础入门C语言之C语言实现数据结构之单链表经典算法
c语言·开发语言·数据结构·算法
纵有疾風起3 小时前
C++—vector:vecor使用及模拟实现
开发语言·c++·经验分享·开源·stl·vector
Dm_dotnet3 小时前
WPF/C#:使用Microsoft Agent Framework框架创建一个带有审批功能的终端Agent
c#
Dm_dotnet3 小时前
WPF/C#:使用Stylet中的IWindowManager用于显示等待窗体、对话框与消息框
c#
任子菲阳3 小时前
学Java第四十三天——Map双列集合
java·开发语言
wearegogog1233 小时前
基于MATLAB的谷物颗粒计数方法
开发语言·matlab