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的博客

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值