C#用MathNet生成矩阵,并打印矩阵元素

文章目录

安装

MathNet.Numerics中提供了线性代数、微积分、特殊函数、概率论、随机函数、插值、最优化等一系列功能,是.net技术中首选的数值计算包。

其中,线性代数包LinearAlgebra包提供了向量、矩阵等数据结构,这些是数值计算的前提,故而相比于其他包更加基础。

下面用VS新建一个控制台项目,并启用顶级语句。点击工具->NuGet包管理器->管理解决方案的NuGet程序包,进入浏览选项卡,搜索MathNet.Numerics,选中安装。

创建和显示矩阵

在使用命名空间之后,可通过Matrix.Build来创建矩阵,矩阵中重写了ToString方法,所以可直接使用$字符串,示例如下

cs 复制代码
using MathNet.Numerics.LinearAlgebra;

Matrix<double> m = Matrix<double>.Build.Random(3,4);
Console.WriteLine($"{m}");

/* 输出结果如下
DenseMatrix 3x4-Double
 -1.34532   0.209099   1.64422   0.13664
  1.15024  -0.751815  0.242772  -1.90048
0.0985362   -1.02023  0.727527  0.137225
*/

即创建的矩阵为

− 1.34532 0.209099 1.64422 0.13664 1.15024 − 0.751815 0.242772 − 1.90048 0.0985362 − 1.02023 0.727527 0.137225 \] \\begin{bmatrix} -1.34532\& 0.209099\& 1.64422\& 0.13664\\\\ 1.15024\&-0.751815\&0.242772\&-1.90048\\\\ 0.0985362\& -1.02023\&0.727527\&0.137225\\\\ \\end{bmatrix} −1.345321.150240.09853620.209099−0.751815−1.020231.644220.2427720.7275270.13664−1.900480.137225 Matrix.Build是MatrixBuilder对象,后文简称MB,用于生成矩阵,如果需要频繁创建矩阵,则可创建一个矩阵生成器,示例如下 ```cs var MB = Matrix.Build; m = MB.Random(3, 4); MB.Dense(3, 4); //3x4的全0矩阵 MB.Dense(3, 4, 1.0); //3x4的全1.0矩阵 MB.Dense(3, 4, (i, j) => 100 * i + j); //通过表达式生成元素 MB.DenseDiagonal(3, 4, 2.0); //3x4对角为2.0 MB.DenseIdentity(3); // 3x3的单位阵 ``` **矩阵类型** MB支持超多种矩阵的生成方式,其中Dense又是最常用的一种,从上面的示例可知,MB提供了多种Dense重载,但前两个输入参数一般为行数和列数,第三个参数则可以是 * 缺省,则所有元素为0 * 数值,则所有元素都是这个数 * 函数,诸如`(i, j) => f(i,j)`,表示 ( i , j ) (i,j) (i,j)处的元素,其值为 f ( i , j ) f(i,j) f(i,j) * 数组,将使用数组中的值进行填充 DenseDiagonal用于生成对角矩阵,包括三种重载, * 阶数,对角数值 * 行数,列数,对角数值 * 行数,列数,对角的生成函数 这两种生成方法,囊括了矩阵生成的一些基本逻辑,从矩阵的形状来说,主要有两种形式,即指定行列数或者指定阶数;而就矩阵的内容而言,则有三种方法,一是用某个值来填充,二是用某个数组中的值来填充,三则是通过函数来生成。 在建立起这种逻辑之后,对于其他矩阵生成方法,也可以逐步尝试 | 方法 | 说明 | |------------------------|--------------| | DenseIdentity | 单位阵 | | Diagonal | 对角方阵 | | DiagonalIdentity | 对角单位阵 | | Random | 随机矩阵 | | RandomPositiveDefinite | 每个元素是两个随机数的积 | 其中,随机矩阵Random可以指定随机数种子或者具体的分布,如果未指定分布,则默认是标准正态分布。

相关推荐
★YUI★9 分钟前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
谷宇.1 小时前
【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
游戏·unity·c#·游戏程序·unity3d·游戏开发·游戏编程
LZQqqqqo1 小时前
C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
windows·c#·list
老歌老听老掉牙4 小时前
SymPy 矩阵到 NumPy 数组的全面转换指南
python·线性代数·矩阵·numpy·sympy
Dm_dotnet4 小时前
Stylet启动机制详解:从Bootstrap到View显示
c#
星期天要睡觉4 小时前
机器学习——CountVectorizer将文本集合转换为 基于词频的特征矩阵
人工智能·机器学习·矩阵
洋曼巴-young4 小时前
240. 搜索二维矩阵 II
数据结构·算法·矩阵
三千道应用题5 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf
何妨重温wdys7 小时前
矩阵链相乘的最少乘法次数(动态规划解法)
c++·算法·矩阵·动态规划
唐青枫10 小时前
别滥用 Task.Run:C# 异步并发实操指南
c#·.net