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

 更新时间:2023年12月03日 16:39:37   作者:微小冷  
MathNet.Numerics中提供了线性代数、微积分、特殊函数、概率论、随机函数、插值、最优化等一系列功能,是.net技术中首选的数值计算包,本文给大家介绍了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
*/

即创建的矩阵为

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

到此这篇关于C#使用MathNet生成矩阵并打印矩阵元素的文章就介绍到这了,更多相关C# MathNet生成并打印矩阵内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现Word转换RTF的示例代码

    C#实现Word转换RTF的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现Word转换RTF,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C# 获取系统字体的示例代码

    C# 获取系统字体的示例代码

    这篇文章主要介绍了C# 获取系统字体的方法,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • C#禁用双击窗体图标关闭窗体的方法

    C#禁用双击窗体图标关闭窗体的方法

    这篇文章主要介绍了C#禁用双击窗体图标关闭窗体的方法,通过对窗体参数的简单设置实现C#禁用双击窗体图标关闭窗体的功能,非常简单实用,需要的朋友可以参考下
    2015-08-08
  • C#接口归纳总结实例详解

    C#接口归纳总结实例详解

    本篇文章通过实例代码对接口做了详解,需要的朋友可以参考下
    2017-04-04
  • c#多进程通讯的实现示例

    c#多进程通讯的实现示例

    本文主要介绍了c#多进程通讯的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C#操作IIS程序池及站点的创建配置实现代码

    C#操作IIS程序池及站点的创建配置实现代码

    最近在做一个WEB程序的安装包;对一些操作IIS进行一个简单的总结;主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作
    2013-03-03
  • C#通过Win32API设置客户端系统时间的方法详解

    C#通过Win32API设置客户端系统时间的方法详解

    在日常工作中,有时可能会需要获取或修改客户端电脑的系统时间,比如软件设置了Licence有效期,本文以一个简单的小例子,简述如何通过C#获取和设置客户端电脑的系统时间,仅供学习分享使用,如有不足之处,还请指正,需要的朋友可以参考下
    2024-06-06
  • C#读取文件所有行到数组的方法

    C#读取文件所有行到数组的方法

    这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下
    2015-07-07
  • C# 线程安全详解

    C# 线程安全详解

    这篇文章主要介绍了c# 线程安全的用法原理及使用示例,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2021-09-09
  • C#中IList<T>与List<T>的区别深入解析

    C#中IList<T>与List<T>的区别深入解析

    本篇文章主要是对C#中IList<T>与List<T>的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01

最新评论