matrices 1.0.2 copy "matrices: ^1.0.2" to clipboard
matrices: ^1.0.2 copied to clipboard

Dart Matrix Computing Library

Matrices 矩阵运算库

灰度功能在目录中使用 ! 进行标记
未实现功能在目录中使用 * 进行标记


目录


Matrices简介 #

Matrices是一个Dart语言的矩阵库。开发它的目的是为Astable等项目提供矩阵运算支持。Matrices目前还处于非常早期的阶段,特性和API随时都会发生变动。目前所有运算均使用Dart语言实现。


矩阵类Matrix #

Matrix类里提供了所有类型的矩阵共有的方法,如创建一般矩阵、查询矩阵的元素或某行某列并对其进行修改,拼接向量或矩阵到原矩阵。但是,Matrix类未提供方阵特有的方法,比如求矩阵行列式的值、求逆矩阵、求特征值等。使用这些方法需要先导入Matrix.dart文件。

Matrix类说明 #

Matrix类只有一个成员变量,即List<List< double >>类型的matrix变量。该变量是公有的,所以可以通过数组操作直接改变矩阵元素的值。禁止使用Matrix()构造方法创建矩阵,只允许使用文档里提供的命名构造方法。

创建Matrix对象 #

创建矩阵

  /// Matrix.fromList(List<List<double>> lists)

  var mat = Matrix.fromList([
    [2, 3, 3, 3],
    [9, 9, 8, 6],
    [1, 1, 2, 9]
  ]);
  print( mat );

  // Matrix: 3x4
  // [2.0, 3.0, 3.0, 3.0]
  // [9.0, 9.0, 8.0, 6.0]
  // [1.0, 1.0, 2.0, 9.0]

元素全为0的矩阵

  /// Matrix.zero(int row, int column)

  var mat = Matrix.zero(2, 3);
  print( mat );

  // Matrix: 2x3
  // [0.0, 0.0, 0.0]
  // [0.0, 0.0, 0.0]

元素全为1的矩阵

  /// Matrix.one(int row, int column)

  var mat = Matrix.one(2, 3);
  print( mat );
  
  // Matrix: 2x3
  // [1.0, 1.0, 1.0]
  // [1.0, 1.0, 1.0]

元素全为某数字的矩阵

  /// Matrix.number(double number, int row, int column)

  var mat = Matrix.number(9, 2, 3);
  print( mat );
  
  // Matrix: 2x3
  // [9.0, 9.0, 9.0]
  // [9.0, 9.0, 9.0]

元素全为随机数的矩阵

  /// Matrix.random(int row, int column)

  var mat = Matrix.random(2, 3);
  print( mat );
  
  // Matrix: 2x3
  // [0.38224693703597046, 0.5412146597032305, 0.6424342222644003]
  // [0.8491145735932242, 0.6236773300386973, 0.25269555696856316]

查询 #

以mat矩阵作为例子进行演示

Matrix mat 3x4
    [2, 3, 3, 3]
    [9, 9, 8, 6]
    [1, 1, 2, 9]

获取某个元素

  print( mat.matrix[1][2] );

  // 8.0

获取某一行元素

  print( mat.matrix[0] );    

  // [2.0, 3.0, 3.0, 3.0]

获取某一列元素

  /// List<double> column(int column)

  print( mat.column(0) );

  // [2.0, 9.0, 1.0]  

获取转置矩阵

  /// Matrix transpose()

  print( mat.transpose() );

  // Matrix: 4x3
  // [2.0, 9.0, 1.0]
  // [3.0, 9.0, 1.0]
  // [3.0, 8.0, 2.0]
  // [3.0, 6.0, 9.0]

获取行阶梯形

  /// Matrix rowEchelonForm()

  print( mat.rowEchelonForm() );

  // Matrix: 3x4
  // [1.0, 0.0, 0.0, 1.5]
  // [0.0, 1.0, 0.0, -7.5]
  // [0.0, 0.0, 1.0, 7.5]

获取矩阵的秩

  /// int rank()

  print( mat.rank() );

  // 3

修改 #

同样以mat矩阵作为例子进行演示

Matrix mat 3x4
    [2, 3, 3, 3]
    [9, 9, 8, 6]
    [1, 1, 2, 9]

修改某个元素

  mat.matrix[0][0] = 3;
  print( mat.matrix[0] );

  // [3.0, 3.0, 3.0, 3.0]

修改某一行元素

  mat.matrix[0] = [1, 4, 5, 0];
  print( mat.matrix[0] );

  // [1.0, 4.0, 5.0, 0.0]

修改某一列元素

  /// setColumn(List<double> list, int column)

  mat.setColumn([1, 4, 5], 0);
  print( mat );

  // Matrix: 3x4
  // [1.0, 3.0, 3.0, 3.0]
  // [4.0, 9.0, 8.0, 6.0]
  // [5.0, 1.0, 2.0, 9.0]

增加 #

同样以mat矩阵作为例子进行演示

Matrix mat 3x4
    [2, 3, 3, 3]
    [9, 9, 8, 6]
    [1, 1, 2, 9]

增加一行元素

  /// addRow(List<double> list, int index)

  mat.addRow([8,8,8,8], 0);
  print( mat );

  // Matrix: 4x4
  // [8.0, 8.0, 8.0, 8.0]
  // [2.0, 3.0, 3.0, 3.0]
  // [9.0, 9.0, 8.0, 6.0]
  // [1.0, 1.0, 2.0, 9.0]

增加一列元素

  /// addColumn(List<double> list, int index)

  mat.addColumn([8, 8, 8], 4);
  print( mat );

  // Matrix: 3x5
  // [2.0, 3.0, 3.0, 3.0, 8.0]
  // [9.0, 9.0, 8.0, 6.0, 8.0]
  // [1.0, 1.0, 2.0, 9.0, 8.0]

按行追加一个矩阵的每一行

  /// appendRows(Matrix injected)

  var tail = Matrix.fromList([
    [8, 8, 8, 8],
    [8, 8, 8, 8]
  ]);
  mat.appendRows(tail);
  print( mat );

  // Matrix: 5x4
  // [2.0, 3.0, 3.0, 3.0]
  // [9.0, 9.0, 8.0, 6.0]
  // [1.0, 1.0, 2.0, 9.0]
  // [8.0, 8.0, 8.0, 8.0]
  // [8.0, 8.0, 8.0, 8.0]  

按列追加一个矩阵的每一列

  /// appendColumns(Matrix injected)

  var tail = Matrix.fromList([
    [8, 8],
    [8, 8],
    [8, 8]
  ]);
  mat.appendColumns(tail);
  print( mat );

  // Matrix: 3x6
  // [2.0, 3.0, 3.0, 3.0, 8.0, 8.0]
  // [9.0, 9.0, 8.0, 6.0, 8.0, 8.0]
  // [1.0, 1.0, 2.0, 9.0, 8.0, 8.0]

删除 #

同样以mat矩阵作为例子进行演示

Matrix mat 3x4
    [2, 3, 3, 3]
    [9, 9, 8, 6]
    [1, 1, 2, 9]

删除某一行元素

  /// deleteRow(int index)

  mat.deleteRow(0);
  print( mat );

  // Matrix: 2x4
  // [9.0, 9.0, 8.0, 6.0]
  // [1.0, 1.0, 2.0, 9.0]

删除某一列元素

  /// deleteColumn(int index)

  mat.deleteColumn(0);
  print( mat );
  
  // Matrix: 3x3
  // [3.0, 3.0, 3.0]
  // [9.0, 8.0, 6.0]
  // [1.0, 2.0, 9.0]

删除某几行元素

PS: 删除多行时,应按照下标从小到大的顺序

  /// deleteRows(List<int> list)

  mat.deleteRows([0, 1]);
  print( mat );

  // Matrix: 1x4
  // [1.0, 1.0, 2.0, 9.0]

删除某几列元素

PS: 删除多列时,应按照下标从小到大的顺序

  /// deleteColumns(List<int> list)

  mat.deleteColumns([0, 2]);
  print( mat );

  // Matrix: 3x2
  // [3.0, 3.0]
  // [9.0, 6.0]
  // [1.0, 9.0]

四则运算 #

加法 !

  var mat = Matrix.fromList([
    [2, 3, 3],
    [1, 2, 9]
  ]);
  print( mat + 3 );
  print( mat + mat );

减法 !

  var mat = Matrix.fromList([
    [2, 3, 3],
    [1, 2, 9]
  ]);
  print( mat - 3 );

数乘&乘法

  // 数乘(数字应在乘号右侧)
  var mat = Matrix.fromList([
    [2, 3, 3],
    [1, 2, 9]
  ]);
  print( mat * 3 );

  // Matrix: 2x3
  // [6.0, 9.0, 9.0]
  // [3.0, 6.0, 27.0]


  // 矩阵乘法
  var multi = Matrix.fromList([
    [2, 3.5],
    [1, -2],
    [-4, 0.5]
  ]);
  print( mat * multi );

  // Matrix: 2x2
  // [-5.0, 2.5]
  // [-32.0, 4.0]

注意! #

后续规划 #


方阵类SquareMatrix #

SquareMatrix类包含了一些方阵特有的方法,如快速创建一个方阵、求方阵的行列式的值、逆矩阵、特征值、特征向量等。使用这些方法需要先导入SquareMatrix.dart文件。

SquareMatrix类说明 #

创建SquareMatrix对象 #

创建方阵

  /// SquareMatrix.fromList(List<List<double>> lists)

  var mat = SquareMatrix.fromList([
    [2, 3, 3],
    [1, 2, 9],
    [9, 8, 6]
  ]);
  print( mat );

  // Matrix: 3x3
  // [6.0, 9.0, 9.0]
  // [3.0, 6.0, 27.0]
  // [27.0, 24.0, 18.0]

元素全为0的方阵

  /// SquareMatrix.zero(int row)

  var mat = SquareMatrix.zero(3);
  print( mat );

  // SquareMatrix: 3x3
  // [0.0, 0.0, 0.0]
  // [0.0, 0.0, 0.0]
  // [0.0, 0.0, 0.0]

元素全为1的方阵

  /// SquareMatrix.one(int row)

  var mat = SquareMatrix.one(3);
  print( mat );

  // SquareMatrix: 3x3
  // [1.0, 1.0, 1.0]
  // [1.0, 1.0, 1.0]
  // [1.0, 1.0, 1.0]

元素全为某数字的方阵

  /// SquareMatrix.number(double number, int row)

  var mat = SquareMatrix.number(2, 3);
  print( mat );

  // SquareMatrix: 3x3
  // [2.0, 2.0, 2.0]
  // [2.0, 2.0, 2.0]
  // [2.0, 2.0, 2.0]

元素全为随机数的方阵

  /// SquareMatrix.random(int row)

  var mat = SquareMatrix.random(3);
  print( mat );

  // SquareMatrix: 3x3
  // [0.2666268534804871, 0.607635195280705, 0.581392153915932]
  // [0.3590813328566256, 0.8098420655296595, 0.015949886001227154]
  // [0.6670401483574298, 0.3054732396044414, 0.3113168618967712]

主对角线元素的值为某数组的对角阵

  /// SquareMatrix.diagonal(List<double> list)

  var mat = SquareMatrix.diagonal([1,2,3]);
  print( mat );

  // SquareMatrix: 3x3
  // [1.0, 0.0, 0.0]
  // [0.0, 2.0, 0.0]
  // [0.0, 0.0, 3.0]

主对角线元素的值为某数字的对角阵

  /// SquareMatrix.diagonalFromNumber(double num, int row)

  var mat = SquareMatrix.diagonalFromNumber(2,3);
  print( mat );

  // SquareMatrix: 3x3
  // [2.0, 0.0, 0.0]
  // [0.0, 2.0, 0.0]
  // [0.0, 0.0, 2.0]

查询 #

获取行列式的值 !

  /// double determinant()

  var dett = SquareMatrix.fromList([
    [1, 2],
    [1, 1]
  ]);
  print(dett.determinant());

  // -1.0

获取逆矩阵 !

  /// SquareMatrix inverse()

  var dett = SquareMatrix.fromList([
    [1, 2],
    [1, 1]
  ]);
  print(dett.inverse());

  // SquareMatrix: 2x2
  // [1.0, -1.0]
  // [1.0, -1.0]

获取特征值 *

  /// double eigenvalue()

获取特征向量 *

  /// Matrix eigenvector()

注意! #

后续规划 #


表情包方法 #

提供一些Matlab用户常用的函数,比如快速生成向量、批量改变矩阵元素的值等等。使用这些方法需要先导入Emoji.dart文件。

快速生成向量 ! * #

o_n

  /// List<double> o_n(int n)

l_n

  /// List<double> o_n(int n)

m_n

  /// List<double> o_n(int m, int n)

l_m_n

  /// List<double> o_n(int l, int m, int n)
10
likes
0
pub points
77%
popularity

Publisher

verified publisherabandoft.com

Dart Matrix Computing Library

License

unknown (LICENSE)

More

Packages that depend on matrices