Math.Net学习(一)矩阵&向量

本文介绍了Math.Net Numberics程序集中矩阵和向量的类型,包括密集和稀疏存储布局,以及如何创建和操作矩阵和向量。矩阵运算支持直接加减乘除,提供高效的维数匹配方法。文章还提到了数据转换和存储优化的细节。
摘要由CSDN通过智能技术生成

矩阵和向量

Math.Net Numberics程序集中包含了矩阵和向量的丰富类型。他们都支持单精度和双精度类型。 像在dotnet中所有的数据类型一样,他们都是基于0索引的,例如,左上位置的索引值是(0,0),在矩阵中第一个索引值指的是行,第二个索引值指的是列,空矩阵和向量不支持,例如,每个维数的长度至少是一。

存储布局

1.向量

  • 密集向量 使用一个与向量相同长度数组。
  • 稀疏向量 用两个通常比向量小的数组,一个数组存储非零值,另一个数组存储他们的索引值,向上排序.

2.矩阵

  • 密集矩阵 用一个数组存储
  • 对角矩阵 只存储对角值,在一个数组存储。
  • 稀疏矩阵 用了三个数组存储,第一个数组存储非零值,第二个数组存储非零值对应列号,第三个数组存储行偏移值,并且最后一个元素存储矩阵中非零值的个数。

第一个数组values存储非零值,顺序是每行从左往右扫,扫完依次扫下一行,即1,7,2,8,5,3,9,6,4

第二个数组column indices存储非零值的对应列号,即0,1,1,2,0,2,3,1,3。

第三个数组row offsets存储行偏移值,首先数组大小为行数+1(该例为4+1),第i个元素值存储第i行首个非零值前面非零值的个数(第0个数肯定为0),例如该数组第1(基于0索引)个值存储的是第1行第一个非零值(该例为2)前面非零值的个数(该例为2,非零值为1,7)。在例如该数组第3个值存储的是第3行第一个非零值(6)前面非零值的个数(该例为7,非零值为1,7,2,8,5,3,9)。第三个数组最后一个值存储矩阵中所有非零值的个数(该例为9)。

 

创建矩阵和向量

Matrix<T>Vector<T>类型定义在MathNet.Numerics.LinearAlgebra 命名空间中。从技术和性能上考虑,可以对每种数据类型进行明确的实现,例如,双精度类型可以使用DenseMatrix 类,这个类在MathNet.Numerics.LinearAlgebra.Double命名空间中。你一般不需要考虑这个,而是使用通常意义的Matrix<T> 的抽象类型,我们需要其他的方法来创建矩阵和向量实例。

Matrix<double> m = Matrix<double>.Build.Random(2, 2);
Vector<double> v = Vector<double
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值