page contents

c# mathnet代替for的学习笔记

本文讲述了c# mathnet代替for的学习笔记!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-11-HbpkupjA637d7e1c95197.jpg本文讲述了c# mathnet代替for的学习笔记!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

在C#中使用mathnet,需要利用using引入相关类

矩阵运算的相关类:

using MathNet.Numerics.LinearAlgebra.Double;

using MathNet.Numerics.LinearAlgebra.Generic;

  1. 矩阵定义和初始化

       常用矩阵初始化函数:

        var matrix2 = new DenseMatrix(3);  //3维方阵

        var matrix3 = new DenseMatrix(2, 3); //2×3矩阵

         var matrix4 = new DenseMatrix(2, 3, 3.0); //2×3矩阵,所有值为3.0

         var matrixI = DenseMatrix.Identity(5); //5维单位矩阵

       矩阵操作和C#中的数组操作一致,matrix2[m,n]取其m行n列上的值或对其赋值

 

         MathNet中重载了.ToString()函数,可以直接用matrix.ToString()输出整个数组,大大方便了调试和保存数据。

      也可以利用C#中的double[,]直接创建

         double[,] d_matrix = new double[2,3];

 var matrix2 = new DenseMatrix(d_matrix); //2×3矩阵

        小记:我曾做过测试,将double[,]先转成Math矩阵,然后进行矩阵运算,再利用matrix2.ToArray()将Math矩阵转换成double[,],其运算时间和直接利用C#编写的矩阵运算相差很小。

 但如果是利用for循环将double数组的数值赋值给Math矩阵进行矩阵运算,然后再利用for循环将Math矩阵赋值给某个double[,]数组,其运算时间可以减少1/3。在开发效率和运算效率上,使用的时候可以根据需要进行取舍。

 

2.矩阵操作

     矩阵操作最常用的莫过于从一个矩阵中取值

            var submatrix = matrix.SubMatrix(2, 2, 3, 3); //取从第二行开始的2行,第三列开始的三列 子矩阵

            var row = matrix.Row(5, 3, 4); //取从第5行第3列开始的4个行元素

            var column = matrix.Column(2, 6, 3); //取从第2列第6行开始的3个列元素

             matrix.ColumnEnumerator(2, 4) //取从第2列开始的4列

             matrix.RowEnumerator(4, 3)//取从第4行开始的3行

            matrix.ToRowWiseArray()/matrix.ToColumnWiseArray() //矩阵变为行向量或者列向量

           matrix.Diagonal()//取矩阵的对角线元素向量

     向矩阵中插值

          var result = matrix.InsertColumn(3, vector)/matrix.InsertRow(3, vector);//将向量vector插入到指定的行/列,原有的行列顺延

           matrix.SetColumn(2, (Vector)vector);/matrix.SetRow(3, (double[])vector);  //用vector替换指定的行/列

    matrix.SetSubMatrix(1, 3, 1, 3, DenseMatrix.Identity(3)); //用矩阵替换指定位置的块矩阵

          matrix.SetDiagonal(new[] { 5.0, 4.0, 3.0, 2.0, 1.0 });  //替换矩阵的对角线元素

          matrixA.Append(matrixB,result)/matrixA.Stack(matrixB,result) //将matrixB扩展到matrixA的右方/上方,将结果保存在result中

    矩阵转换:   

           var permutations = new Permutation(new[] { 0, 1, 3, 2, 4 });

    matrix.PermuteRows(permutations);   //互换矩阵的3,4行

 

            permutations = new Permutation(new[] { 1, 0, 4, 3, 2 });

            matrix.PermuteColumns(permutations);  //互换矩阵的1,2列,3,5列。

            可以看出,互换是由Permutation中的数字序号决定的。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2022-11-23 09:58
  • 阅读 ( 402 )
  • 分类:C/C++开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章