栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#中利用Math.NET进行矩阵运算,极大提高数组运算的性能

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#中利用Math.NET进行矩阵运算,极大提高数组运算的性能

本人写了一个airPLS的算法,用到大量的数组运算,由于以前是用for循环来解决数组计算,如果你的数组很大,那么整个算法跑下来非常消耗时间。解决办法是利用MathNet.Numerics,他的安装方法见博客,或者可以直接下载MathNet.Numerics.dll。
使用前先添加命名空间

using MathNet.Numerics.LinearAlgebra.Double;

using MathNet.Numerics.LinearAlgebra.Generic;
一、常用的矩阵初始化
var matrix1 = new DenseMatrix(4);  //4维方阵

var matrix2 = new DenseMatrix(3, 4); //3×4矩阵

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

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

double[,] matrix4 = new double[5,3];
var matrix5 = new DenseMatrix(matrix4); //5×3矩阵

matrix2.ToArray()//将Math矩阵转换成double[,]

var matrixw =new  DenseVector(900);//定义一个900*1的列向量
二、常用的矩阵的操作

1.矩阵运算

matrix.Diagonal()//取矩阵的对角线元素向量
matrix.SetDiagonal(new[] { 1,2,3,4,5,6 });  //替换矩阵的对角线元素
matrixB = matrixA.Inverse()          //求逆
matrixB = matrixA.Transpose()        //矩阵转置
matrixC = matrixA + matrixB          //矩阵加
matrixC = matrixA - matrixB 
matrixC = matrixA * matrixB 

2.求解线性方程组
1xa + 5xb + 8xc = -3
-3xa - 7xb + 2xc = 4
2xa - 4xb - 1xc = 5

var matrixA = DenseMatrix.OfArray(new double[,] { { 1,5,8 }, { 3,-7,2 }, { 2,-4,-1 } });
var vectorB = new DenseVector(new[] { -3,4,5 });
var resultX = matrixA.LU().Solve(vectorB);//或者 resultX = matrixA.QR().Solve(vectorB);

更多矩阵的知识可以查看protear的博客。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/910111.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号