当前位置: 首页 > article >正文

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

文章目录

    • 安装
    • 创建和显示矩阵

安装

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

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

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

创建和显示矩阵

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

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.2090990.7518151.020231.644220.2427720.7275270.136641.900480.137225

Matrix.Build是MatrixBuilder对象,后文简称MB,用于生成矩阵,如果需要频繁创建矩阵,则可创建一个矩阵生成器,示例如下

var MB = Matrix<double>.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可以指定随机数种子或者具体的分布,如果未指定分布,则默认是标准正态分布。


http://www.kler.cn/news/159632.html

相关文章:

  • 智能优化算法应用:基于冠状病毒群体免疫算法无线传感器网络(WSN)覆盖优化 - 附代码
  • Python list tuple dict set的文件持久操作
  • acwing算法基础之时空复杂度分析
  • MFC对话框集成OSG无法响应键盘事件
  • 使用Pytorch从零开始实现BERT
  • python爬虫-某公开数据网站实例小记
  • vue中el-upload结合vuedraggable实现图片的上传、排序、删除以及预览等功能
  • 2023-12-01 AndroidR 系统在root目录下新建文件夹和创建链接,编译的时候需要修改sepolicy权限
  • 创建腾讯云存储桶---上传图片--使用cos-sdk完成上传
  • 简介Kadane算法及相关的普通动态规划
  • RepidJson将内容格式化后写入文件
  • 【OpenSSH升级】升级后证书认证登录突然失效
  • C语言能判断一个变量是int还是float吗?
  • 若依框架 前台自己获取登录用户信息
  • 矩阵处理—转圈打印矩阵
  • HomeAssistant如何添加HACS插件实现公网控制米家与HomeKit等智能家居
  • Redis的基本数据类型及常用命令
  • Codeforces Round 913 (Div. 3) A~E(F,G更新中)
  • ES6迭代器
  • Elasticsearch一些函数查询
  • 【头歌系统数据库实验】实验4 MySQL单表查询
  • HarmonyOS学习--TypeScript语言学习(三)
  • 图片点击放大
  • go基础语法10问(2)
  • WPF Live Charts2 自学笔记
  • 20、pytest中的参数化
  • 213. 打家劫舍 II --力扣 --JAVA
  • 华为云obs在java中的使用
  • 应用层自定义协议
  • Jmeter测试移动接口性能 —— 压测