vb.net在MathNet.Numerics库中的一些矩阵使用方法

一、矩阵定义

方法一:

Dim mat1(2, 2) As Double  '声明一个两行两列的二维数组

二维数组:Mat1={{1, 4, 7},{2 5 8},{3 6 9}} '数组赋值

Dim mat2(2, 2) As Double

二维数组:Mat2={{1 1 2},{1 3 2},{2 0 3}}

Dim a As DenseMatrix  '声明a为稠密矩阵

a = DenseMatrix.OfArray(mat1) '创建矩阵

得:a=[1 4 7; 2 5 8; 3 6 9]

同理可得:b=[1 1 2; 1 3 2; 2 0 3]

 

Dim resu As DenseVector '声明一个向量

resu = {1, 2, 3}

 

方法二:

Dim Mat1 = Matrix.Build '创建一个矩阵

Dim a = Mat1.Dense(3, 3, {1, 2, 3, 4, 5, 6, 7, 8, 9}) '矩阵的维度维三行三列

得:a =[1 4 7; 2 5 8; 3 6 9]

 

二、矩阵操作

Dim a1 = a.At(m, n) '选择矩阵m+1行第n+1列元素m和n分别表示矩阵行和列的索引

a.Clear() '设置矩阵的所有元素为零

得:a=[0 0 0; 0 0 0; 0 0 0]

a.ClearColumn(n)'设置第n+1列为零

例如:a.ClearColumn(1)

得:a=[1 0 7; 2 0 8; 3 0 9]

a.ClearColumns(m, n)'设置第m+1n+1列为零

例如:a.ClearColumn(1, 2)

得:a=[1 0 0; 2 0 0; 3 0 0]

a.ClearRow(n)'设置第n+1行为零

例如:a.ClearRow(1)

得:a=[1 4 7; 0 0 0; 3 6 9]

a.ClearRows(m, n)'设置第m+1n+1行为零

例如:a.ClearRows(1, 2)

得:a=[1 4 7; 0 0 0; 0 0 0]

a.ClearSubMatrix(m, mCount, n, nCount)'从第m+1行起行数为mCount,第n+1列起列数为nCount的子矩阵为零

例如:a.ClearSubMatrix(0, 2, 0, 2)

得:a=[0 0 7; 0 0 8; 3 6 9]

Dim Re = a.Clone '克隆矩阵

得:Re=[1 4 7; 2 5 8; 3 6 9]

a.CoerceZero(threshold)'矩阵绝对值小于threshold的元素为零

例如:a.CoerceZero(4)

得:a=[0 4 7; 0 5 8; 0 6 9]

Dim Re = a.Column(n) '取矩阵的第n+1,返回列向量

例如:Re = a.Column(1)

得:Re =[4; 5; 6]

Dim Re = a.Column(n, m, len) '取矩阵第n+1列第m+1行长度为len向量

例如:Re = a.Column(2, 1, 2)

得:Re =[8; 9]

a.Column(n, resu) '取得n+1列的列向量复制到resu

例如:a.Column(1, resu)

得:resu=[4; 5; 6]

a.Column(n, m, len, resu) '取矩阵第n+1列第m+1行长度为len向量向量复制到resu

例如:a.Column(2, 1, 2, resu)

得:resu=[8; 9; 3]

Dim Re = a.Row(m) '取矩阵的第m+1

例如:Re = a.Row(1)

得:Re =[2 5 8]

Dim Re = a.Row(m, n, len) '取从第m+1行第n+11列开始的len个行元素

例如:Re = a.Row(1, 1, 2)

得:Re=[5 8]

Dim Re = a.ColumnAbsoluteSums '计算每列的绝对值和

得:Re =[6 15 24]

Dim Re = a.ColumnSums '计算每列的和

得:Re =[6 15 24]

Dim Re = a.ColumnNorms(p) '求每列的p范数,p为1、2无穷范数(无穷范数参数在vb中参数书写暂时没找到

例如:Re = a.ColumnNorms(1)

得:Re=[6 15 24]

例如:Re = a.ColumnNorms(2)

得:Re=[3.742 8.775 13.928]

Dim Re = a.RowAbsoluteSums '计算矩阵每行的绝对值和

得:Re =[12; 15; 18]

Dim Re = a.RowSums '计算每行的和

得:Re=[12; 15; 18]

Dim Re = a.RowNorms(p) '求每行的p范数,p为1、2、无穷范数

例如:Re = a.RowNorms(2)

得:Re=[8.12; 9.64; 11.22]

Dim Re = a.ConditionNumber() '计算矩阵的条件数,条件数通过奇异值分解计算的

得:Re =30394691695055128.0

a.CopyTo(b) '将a矩阵复制到b矩阵

得:b=[1 4 7; 2 5 8; 3 6 9]

Dim Re = a.DiagonalStack(b) '对角堆栈,b在a的右下角,其余用零值补充,返回的矩阵行和列等于a和b两矩阵行和列数之和

得:Re = [1 4 7 0 0 0;2 5 6 0 0 0;3 6 9 0 0 0;0 0 0 1 1 2;0 0 0 1 3 2;0 0 0 2 0 3]

Dim Re = a.Enumerate() '枚举型,遍历矩阵所有值,类型为double()型

得:Re ={1 2 3 4 5 6 7 8 9}

Dim Re = a.Equals(b) '判a和b是否相等,返回bool型

得:Re =False

Dim Re = a.FrobeniusNorm() '计算矩阵每个元素平方和,再求平方根

得:Re =16.882

Dim Re = a.GetHashCode() '计算哈希用于哈希算法

得:Re =1424130831

Dim Re = a.GetType() '返回类型

得:Re =DenseMatrix

Dim Re = a.LowerTriangle() '下三角

得:Re =[1 0 0; 2 5 0; 3 6 9]

Dim Re = a.Negate() '矩阵每个元素添加负号

得:Re =[-1 -4 -7; -2 -5 -8; -3 -6 -9]

Dim Re = a.RemoveColumn(n) '删除n+1

例如:Re = a.RemoveColumn(1)

得:Re = [1 2 3; 7 8 9]

Dim Re = a.RemoveRow(m) '删除m+1

例如:Re = a.RemoveRow(1)

得:Re =[1 4 7;3 6 9]

Dim Re = a.ToArray() '矩阵转换为二维数组

得:Re ={{1, 4, 7},{2 5 8},{3 6 9}}

Dim Re = a.ToColumnArrays() '以列数组的形式返回矩阵

得:Re ={{1; 2; 3},{4; 5; 6},{7; 8; 9}}

Dim Re = a.ToColumnMajorArray() '以数组的形式返回矩阵的元素,数据按列排列

得:Re ={1 2 3 4 5 6 7 8 9}

Dim Re = a.ToMatrixString '返回一个字符串,该字符串汇总此矩阵的内容

得:Re =1 4 7 2 5 8 3 6 9

Dim Re = a.Append(b) '矩阵连接起来

得:Re =[1 4 7 1 1 2; 2 5 8 1 3 2; 3 6 9 2 0 3]

Dim Re = a.ToString() '返回一个汇总此矩阵的字符串

得:Re =DenseMatrix 3x3-Double 1 4 7; 2 5 8; 3 6 9

Dim Re = a.ToTypeString() '返回一个字符串,该字符串描述该矩阵的类型、尺寸和形状

得:Re =DenseMatrix 3x3-Double

Dim Re = a.ToArray() '以多维数组的形式返回这个矩阵

得:Re ={{1, 4, 7},{2 5 8},{3 6 9}}

Dim Re = a.ColumnCount '列数

得:Re =3

Dim Re = a.RowCount '行数

得:Re =3

Dim Re = a.SubMatrix(m, m_num, n, n_num) '取从第m+1行开始的m_num行,第n+1列开始的n_num列 子矩阵

例如:Re = a.SubMatrix(1, 2, 1, 2)

得:Re =[5 8; 6 9]

Dim Re = a.Diagonal() '取矩阵的对角线元素向量

得:Re =[1 5 9]

Dim vec As DenseVector

vec = {1, 2, 3}

Dim Re = a.InsertColumn(n, vec)  '将向量vector插入到指定的n+1列,原有的行列顺延

例如:Re = a.InsertColumn(3, vec)

得:Re =[1 4 7 1; 2 5 8 2; 3 6 9 3]

Dim Re = a.InsertRow(m, vec) '将向量vector插入到指定的m+1行,原有的行列顺延

例如:Re = a.InsertRow(3, vec)

得:Re =[1 4 7; 2 5 8; 3 6 9; 1 2 3]

a.SetColumn(n, vector)  '用vector替换指定的n+1

例如:a.SetColumn(2, vector)

得:a=[1 4 1; 2 5 2; 3 6 3]

a.SetRow(m, vector) '用vector替换指定的m+1

例如:a.SetRow(2, vector)

得:a=[1 4 7; 2 5 8; 1 2 3]

a.SetDiagonal(vec)  '替换矩阵的对角线元素

得:a=[1 4 7; 2 2 8; 3 6 3]

Dim re(,) As Double

re = {{1, 1}, {2, 2}}

Dim rep As DenseMatrix

rep = DenseMatrix.OfArray(re)

a.SetSubMatrix(m, m_num, n, n_num, rep) '用矩阵替换m+1行起m_num行,第n+1列起n_num指定位置的块矩阵

例如:a.SetSubMatrix(1, 2, 1, 2, rep)

得:a=[1 4 7; 2 1 1; 3 2 2]

 

三、矩阵运算

Dim Re = a.Add(b) '矩阵加法

得:Re =[2 5 9; 3 8 10; 5 6 12]

Dim Re = a.Subtract(b) '矩阵减法

得:Re =[0 3 5; 1 2 6; 1 6 6]

Dim Re = a * b '矩阵相乘

得:Re = [19 13 31; 23 17 38; 27 21 45]

Dim Re = a.PointwiseMultiply(b) '矩阵点乘

得:Re =[1 4 14; 2 15 16; 6 0 27]

Dim Re = a * 2 '矩阵数乘

得:Re =[2 8 14; 4 10 16; 6 12 18]

Dim Re = a.LeftMultiply(vec) '向量矩阵

得:Re =[14 32 50]

Dim Re = vec * a

得:Re =[14 32 50]

Dim Re = a * vec '矩阵乘向量

得:Re =[30; 36; 42]

Dim Re = a.PointwiseDivide(b) '矩阵点除

得:Re =[1 4 3.5; 2 1.667 4; 1.5 INF 3]

Dim Re = a.Inverse '矩阵求逆

得:Re =[=4.5 1.5 2; -0.5 0.5 0; 3 -1 -1]

Dim Re = a.Transpose '矩阵转置

得:Re =[1 2 3; 4 5 6; 7 8 9]

Dim Re = a.Trace '矩阵的迹

得:Re =15

Dim Re = a.Rank '矩阵的秩

得:Re =2

Dim Re = a.L1Norm '矩阵的1范数

得:Re =24

Dim Re = a.L2Norm '矩阵的2范数

得:Re =16.8481

Dim Re = a.InfinityNorm '矩阵的无穷范数

得:Re =18

Dim Re = b.Determinant '矩阵的行列式

得:Re =-1.9999999999999996

Dim Re = a.Svd(True) '奇异值分解

得:Re.S=[16.848 1.0684 0]

    Re.VT=[-0.2148 -0.5206 -0.8263; -0.8872 -0.2496 0.3879; 0.4082 -0.8165 0.4082]

    Re.U=[-0.4797 0.7767 0.4082; -0.5724 0.0757 -0.8165; -0.6651 -0.6253 0.4082]

Dim Re = a.Evd() '特征分解

得:Re.EigenValues=[16.1168 -1.1168 -5.1063]

Re.EigenVectors=[0.4645 0.9179 0.4082; 0.5708 0.2490 -0.8165; 0.6770 -0.4199 0.4082]

Dim Re = a.TransposeAndMultiply(b) '将矩阵a乘以矩阵b的

得:Re =[19 27 23; 23 33 28; 27 39 33]

Dim Re = a.TransposeThisAndMultiply(vec)'将这个矩阵的转置乘以向量

得:Re =[14; 32; 50]

Dim Re = a.TransposeThisAndMultiply(b) '将矩阵a的转置乘以矩阵b

得:Re = [9 7 15; 21 19 36; 33 31 57]

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值