Skip to content

概率论与数理统计

mean

  • 获取均值
    Object mean({int dim = -1})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  var mt = Matrix.fromList([
    [1, 2, 3, 1],
    [2, 0, -4, double.infinity],
    [0, 5, 7, -6]
  ]);
  print(mt.mean(dim: 0));
  print(mt.mean(dim: 1));
  print(mt.mean(dim: 2));
}

output

[1.75, Infinity, 1.5]
[1.0, 2.3333333333333335, 2.0, Infinity]
Infinity

median

  • 获取中位数
    Object median({int dim = -1})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  var mt = Matrix.fromList([
    [1, 2, 3, 1],
    [2, 0, -4, double.infinity],
    [0, 5, 7, -6]
  ]);
  print(mt.median(dim: 0));
  print(mt.median(dim: 1));
  print(mt.median(dim: 2));
}

output

[1.5, 1.0, 2.5]
[1.0, 2.0, 3.0, 1.0]
1.5

mode

  • 根据规则,在n种元素中获取众数
  • 当元素个数都一样的时候返回null
  • 当有t种元素个数相同的时候(t<n),取第一种元素
    dynamic mode({int dim = -1})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  var mt = Matrix.fromList([
    [1, 2, 3, 1],
    [2, 0, -4, double.infinity],
    [0, 5, 7, -6],
    [1, 2, 7, -6],
    [1, 1, 2, 2]
  ]);
  print(mt.mode(dim: 0));
  print(mt.mode(dim: 1));
  print(mt.mode(dim: 2));
}

output

[1.0, null, null, null, null]
[1.0, 2.0, 7.0, -6.0]
1.0

shakeTotal

  • 对数据进行随机抖动,范围(-bias,bias)
    void shakeTotal({double bias = 1.0, int? seed}) 
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  var mt = Matrix.fromList([
    [1, 2, 3, 1],
    [2, 0, -4, double.infinity],
    [0, 5, 7, -6],
    [1, 2, 7, -6],
    [1, 1, 2, 2]
  ]);
  mt..shakeTotal(bias: 1)..visible();
}

output

[
 [ 1.12163  1.92272  3.81764  0.58426]
 [ 1.56001  0.71463 -3.86042 Infinity]
 [ 0.74075  4.35658  6.08286 -5.54264]
 [ 1.96749  1.04282  7.97017 -6.52791]
 [ 0.38011  1.53244  1.20357  2.65322]
]

shakePercent

  • 对指定比例的数据进行随机抖动,范围(-bias,bias)
    void shakePercent({double bias = 1.0, double percent = 0.5, int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  var mt = Matrix.fromList([
    [1, 2, 3, 1],
    [2, 0, 9, 7],
    [0, 5, 7, -6],
    [1, 2, 7, -6],
    [1, 1, 2, 2]
  ]);
  mt..shakePercent(bias: 1, percent: 0.5, seed: 0)..visible();
  print(mt.count((x) => x == x.toInt(), dim: -1));
}

output

[
 [ 1.00000  2.00000  3.00000  1.59552]
 [ 2.00000 -0.16072 -4.00000 Infinity]
 [ 0.36040  5.59324  7.00000 -6.78034]
 [ 1.64683  2.62451  7.00000 -6.00000]
 [ 1.00000  1.00000  1.14995  2.11472]
]
10

shakeProbably

  • 对每个数据概率性随机抖动,范围(-bias,bias)
    void shakeProbably({double bias = 1.0, double p = 0.5, int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  var mt = Matrix.fromList([
    [1, 2, 3, 1],
    [2, 0, 9, 7],
    [0, 5, 7, -6],
    [1, 2, 7, -6],
    [1, 1, 2, 2]
  ]);
  mt
    ..shakeProbably(bias: 1, p: 0.75, seed: 0)
    ..visible()
    ..shakeProbably(bias: 1, p: 0.2, seed: 0)
    ..visible();
}

output

[
 [ 1.00000  2.00000  3.11472  1.95573]
 [ 2.00000  0.62451  8.18995  7.97010]
 [ 0.79149  5.74322  7.02362 -5.83102]
 [ 1.00000  1.31213  6.28323 -6.08534]
 [ 0.03197  0.66427  2.21624  2.00000]
]
[
 [ 1.00000  2.00000  3.11472  1.95573]
 [ 2.00000  0.62451  8.18995  7.97010]
 [ 0.79149  5.68677  7.02362 -5.83102]
 [ 1.00000  1.31213  6.28323 -6.08534]
 [ 0.03197  0.66427  2.21624  2.02362]
]

shuffle

  • 打乱数据
    void shuffle({int? seed, int dim = -1})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%8.0f";
  var mt = Matrix.fromList([
    [1, double.nan, 3, 1],
    [2, 0, 9, 7],
    [0, 5, 7, -6],
    [1, double.infinity, 7, -6],
    [1, 1, double.negativeInfinity, 2]
  ]);
  mt
    ..shuffle(dim: 0)
    ..visible()
    ..shuffle(dim: 1)
    ..visible()
    ..shuffle(dim: 2)
    ..visible();
}

output

[
 [        1       NaN         1         3]
 [        9         7         0         2]
 [        7         5        -6         0]
 [       -6  Infinity         1         7]
 [        1 -Infinity         2         1]
]
[
 [       -6 -Infinity         1         0]
 [        1         7         2         7]
 [        9  Infinity        -6         2]
 [        7         5         0         3]
 [        1       NaN         1         1]
]
[
 [        1         1         2 -Infinity]
 [       -6         7         0         2]
 [ Infinity         5         1         7]
 [       -6         1         0         1]
 [        3         9       NaN         7]
]

uniform

  • 均匀分布
    static T uniform<T extends MatrixBase<T>>(
          {double lb = 0.0,
          double ub = 1.0,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  MatrixRandom.uniform<Matrix>(row: 2, column: 8).visible();
}

output

[
 [ 0.72182  0.36967  0.50301  0.59886  0.95493  0.90183  0.50644  0.13281]
 [ 0.92723  0.96414  0.03060  0.92897  0.90201  0.29696  0.81846  0.58139]
]

normal

  • 正态分布
    static T normal<T extends MatrixBase<T>>(
          {double mu = 0.0,
          double sigma = 1.0,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  MatrixRandom.normal<Matrix>(row: 2, column: 8).visible();
}

output

[
 [-2.11616 -2.44480  2.95000  1.16511 -1.44609  1.14767 -0.28159 -0.22208]
 [-0.23525  0.78347 -0.37689  1.11326 -0.02535  0.54844 -1.11553  0.25712]
]

binomial

  • 二项分布
  • n是试验次数,p是成功的概率
    static T binomial<T extends MatrixBase<T>>(
          {required int n,
          required double p,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.0f";
  MatrixRandom.binomial<Matrix>(n: 10, p: 0.4, row: 2, column: 5).visible();
}

output

[
 [  5   6   4   3   4]
 [  4   1   3   4   4]
]

chisquare

  • 卡方分布,其中正整数df是自由度
    static T chisquare<T extends MatrixBase<T>>(
          {required int df, required int row, required int column, int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  MatrixRandom.chisquare<Matrix>(df: 5, row: 2, column: 8).visible();
}

output

[
 [ 2.02621  3.94982  2.45784  3.73202  4.25828  8.80980  3.70948 10.56275]
 [ 3.50148  1.81609  6.09900  7.97319  7.45826  4.74143  2.30963  8.61327]
]

exponential

  • 指数分布,正实数lambda是速率参数
    static T exponential<T extends MatrixBase<T>>(
          {required double lambda,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  MatrixRandom.exponential<Matrix>(lambda: 2.5, row: 2, column: 8).visible();
}

output

[
 [ 0.08276  0.00139  0.29485  0.79533  0.12472  0.98942  0.74717  0.62893]
 [ 0.61888  1.48321  0.20256  0.03876  0.70940  0.35311  0.40923  0.24835]
]

f

  • F 分布。其中d1和d2是两个独立卡方分布的自由度
    static T f<T extends MatrixBase<T>>(
          {required int d1,
          required int d2,
          required int row,
          required int column,
          int? seed}) 
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%3.5f";
  MatrixRandom.f<Matrix>(d1: 1, d2: 2, row: 2, column: 8).visible();
}

output

[
 [  4.93056   0.11101   0.01529   1.57699   1.16049   0.71412   0.59531   1.83859]
 [  4.73860   0.91165   2.57683   0.11337   5.69172   0.01585   0.11492   0.44708]
]

gamma

  • 伽马分布。其中k是形状参数,theta是尺度参数。它俩都是正数
    static T gamma<T extends MatrixBase<T>>(
          {required double k,
          required double theta,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%3.5f";
  MatrixRandom.gamma<Matrix>(k: 1, theta: 2, row: 2, column: 8).visible();
}

output

[
 [  5.14067   1.42020   1.75349   0.71228   0.01489   0.82426   0.00388   0.06545]
 [  2.22228   7.38054   0.33947   0.71414   0.19316   3.16064   0.71124   3.24876]
]

beta

  • Beta分布,参数a和b分别是分子和分母的形状参数
    static T beta<T extends MatrixBase<T>>(
          {required double a,
          required double b,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%3.5f";
  MatrixRandom.beta<Matrix>(a: 1, b: 2, row: 2, column: 8).visible();
}

output

[
 [  0.49407   0.39837   0.09070   0.11256   0.59922   0.50666   0.15258   0.70883]
 [  0.18135   0.19389   0.18008   0.41081   0.25688   0.21515   0.07910   0.33202]
]

dirichlet

  • 狄利克雷分布,alpha参数是一个长度为列且不小于2的浮点序列
  • alpha 中的每个数字都必须大于0
    static T dirichlet<T extends MatrixBase<T>>(
          {required List<double> alpha, required int row, int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%3.5f";
  MatrixRandom.dirichlet<Matrix>(alpha: [1, 3.3, 1.5, 0.78, 2, 2, 1.7, 2], row: 2).visible();
}

output

[
 [  0.09739   0.46528   0.03357   0.00008   0.14472   0.13976   0.08812   0.03108]
 [  0.19171   0.25310   0.14525   0.02408   0.14559   0.16670   0.03892   0.03466]
]

geometric

  • 几何分布,其中p是成功的概率
    static T geometric<T extends MatrixBase<T>>(
          {required double p, required int row, required int column, int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.0f";
  MatrixRandom.geometric<Matrix>(p: 0.25, row: 2, column: 10).visible();
}

output

[
 [  7   2   3   1   1   5   4   1  18   1]
 [ 10   1   4   2   1   7   2   2   3   9]
]

gumbel

  • Gumbel 分布
  • 其中loc是分布众数的位置
  • scale是分布的尺度参数,必须为非负值
    static T gumbel<T extends MatrixBase<T>>(
          {required double loc,
          required double scale,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main(){
  data_format = "%2.5f";
  MatrixRandom.gumbel<Matrix>(loc: 2, scale: 2, row: 2, column: 8).visible();
}

output

[
 [ 0.79973  1.47329  0.77731  1.35254  1.03301  6.36100  5.02553  0.39647]
 [ 2.50385  3.34456  1.25769 -0.80591  6.03160  2.28924  2.21749  1.99499]
]

hypergeometric

  • 超几何分布,参数N、K、n分别表示元素总数、目标元素总数、抽取样本数,最终得到样本中目标元素的数量
    static T hypergeometric<T extends MatrixBase<T>>(
          {required int N,
          required int K,
          required int n,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.0f";
  MatrixRandom.hypergeometric<Matrix>(N: 20,
      K: 10,
      n: 5,
      row: 2,
      column: 8).visible();
}

output

[
 [  0   2   2   2   2   2   2   1]
 [  3   2   1   2   4   2   3   3]
]

laplace

  • 拉普拉斯分布,又称双指数分布,mu为位置参数,非负b为尺度参数。
    static T laplace<T extends MatrixBase<T>>(
          {required double mu,
          required double b,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.laplace<Matrix>(mu: 0, b: 0.5, row: 2, column: 8).visible();
}

output

[
 [ 0.62375 -0.39557  0.05964  0.69604 -0.19187 -0.31969 -0.05227  0.16362]
 [ 0.00698 -1.03409 -0.06551  0.76127  2.03078 -0.47385  0.63251  0.91648]
]

logistic

  • Logistic分布,其中mu和s分别是位置和尺度参数,且s大于 0
    static T logistic<T extends MatrixBase<T>>(
          {required double mu,
          required double s,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.logistic<Matrix>(mu: 1, s: 2, row: 2, column: 8).visible();
}

output

[
 [-5.19389 -5.07993 -0.57864  3.94618 -2.20507 -1.24739  1.12640  2.20015]
 [ 0.49239  3.60076  3.29199  2.94326 -1.70884  4.28270  2.13897 -4.37265]
]

lognormal

  • 对数正态分布,其中mu和sigma分别是位置参数和尺度参数,且sigma大于 0
    static T lognormal<T extends MatrixBase<T>>(
          {required double mu,
          required double sigma,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.lognormal<Matrix>(mu: 2, sigma: 0.5, row: 2, column: 8).visible();
}

output

[
 [18.12334 12.84363  5.79773  6.37634  4.43129  8.25890  5.64034  7.05924]
 [ 9.87825  7.99804  6.27516  4.19677 11.05468 11.32761  6.01271  5.69678]
]

multinomial

  • 多项分布,其中n是试验次数,p是总和为1的概率列表
    static T multinomial<T extends MatrixBase<T>>(
          {required int n, required List<double> p, required int row, int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.0f";
  MatrixRandom.multinomial<Matrix>(n: 10, p: [0.1, 0.15, 0.05, 0.2, 0.4, 0.1], row: 2).visible();
}

output

[
 [  0   2   0   2   5   1]
 [  1   1   0   4   4   0]
]

poisson

  • 泊松分布,参数lambda表示平均值
    static T poisson<T extends MatrixBase<T>>(
          {required double lambda,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.0f";
  MatrixRandom.poisson<Matrix>(lambda: 2, row: 2, column: 8).visible();
}

output

[
 [  4   2   5   0   3   4   1   1]
 [  3   1   0   3   2   3   5   0]
]

cauchy

  • 柯西分布,参数x0表示中心位置,正数gamma表示尺度
    static T cauchy<T extends MatrixBase<T>>(
          {required double x0,
          required double gamma,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.cauchy<Matrix>(x0: 0, gamma: 1, row: 2, column: 8).visible();
}

output

[
 [-36.62911  0.72481  3.37703  1.14735  0.12744 -0.28093 -5.73963  0.85222]
 [ 2.07105  1.33930 -0.90362 -0.71522 -4.79772  3.65556 -0.45629 -0.69549]
]

pareto

  • 帕累托分布,正数xm是尺度参数,正数alpha是形状参数
    static T pareto<T extends MatrixBase<T>>(
          {required double xm,
          required double alpha,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.pareto<Matrix>(xm: 1, alpha: 1, row: 2, column: 8).visible();
}

output

[
 [ 2.13617  1.05138  2.59410  1.69382  2.13383  7.34943  1.93597  1.61736]
 [ 1.35915  1.16898  4.63186  4.15207  1.76849 14.69354  2.31302  2.73154]
]

rayleigh

  • 瑞利分布,正数sigma是尺度参数。
    static T rayleigh<T extends MatrixBase<T>>(
          {required double sigma,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.rayleigh<Matrix>(sigma: 1, row: 2, column: 8).visible();
}

output

[
 [ 1.07546  2.06677  1.11999  0.53733  1.10249  1.15054  2.22445  1.53285]
 [ 0.77856  1.41063  0.24988  2.02035  1.24209  1.57036  1.73024  2.23977]
]

triangular

  • 三角分布,下限a,上限b,众数c。
    static T triangular<T extends MatrixBase<T>>(
          {required double a,
          required double b,
          required double c,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.triangular<Matrix>(a: -2, b: 3, c: 0, row: 2, column: 9).visible();
}

output

[
 [ 0.71009 -0.91656  0.16837 -1.15603  1.52162  0.94240  0.88847  0.36057  0.14813]
 [ 1.97316 -0.85960  0.44336 -0.01748  0.50504  2.18705 -0.69879 -0.07549 -0.01691]
]

wald

  • 逆高斯分布(也称为 Wald 分布),均值为正数mu,形状参数为lambda
    static T wald<T extends MatrixBase<T>>(
          {required double mu,
          required double lambda,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.wald<Matrix>(mu: 1, lambda: 2, row: 2, column: 9).visible();
}

output

[
 [ 0.81247  0.62909  0.45730  3.96918  1.60884  0.48366  2.83001  1.14535  0.35252]
 [ 0.59226  0.86075  1.60548  0.96771  0.46557  0.68437  0.45168  1.52735  0.64942]
]

weibull

  • 威布尔分布,尺度参数lambda和形状参数k均为正数
    static T weibull<T extends MatrixBase<T>>(
          {required double k,
          required double lambda,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.weibull<Matrix>(k: 1, lambda: 2, row: 2, column: 8).visible();
}

output

[
 [ 1.77253  2.04454  0.79726  0.03651  0.41815  1.14795  0.26157  0.63567]
 [ 1.26025  0.62709  2.27595  0.50974  0.14316  2.67833  0.65225  1.38974]
]

vonmises

  • 冯·米塞斯分布,参数mu和k分别表示位置和浓度,k > 0
    static T vonmises<T extends MatrixBase<T>>(
          {required double k,
          required double mu,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.vonmises<Matrix>(k: 1, mu: 2, row: 2, column: 8).visible();
}

output

[
 [ 0.21612  2.38583  2.33520  2.44294  0.70750  1.90340  2.35548  1.59108]
 [ 3.54407  2.16340  1.06748  3.17789  0.73116  1.55998  3.85376  1.58202]
]

t

  • 学生 t 分布,正整数 v表示自由度,mu是非中心参数。
    static T t<T extends MatrixBase<T>>(
          {required int v,
          required double mu,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.t<Matrix>(v: 5, mu: 1, row: 2, column: 8).visible();
}

output

[
 [ 0.62758  2.62640  2.62945  1.69008 -2.20297 -0.34357  2.35201  0.05813]
 [ 0.77000  0.98190  4.40171  1.47281  2.35428  0.31133  2.76713  1.65198]
]

frechet

  • Fréchet分布,也称为逆威布尔分布,正数alpha是形状参数,比例参数s也是正数,m是位置参数
    static T frechet<T extends MatrixBase<T>>(
          {required double alpha,
          double s = 1.0,
          double m = 0.0,
          required int row,
          required int column,
          int? seed})
    

test

import 'package:flutter_matrix/matrix_type.dart';

main() {
  data_format = "%2.5f";
  MatrixRandom.frechet<Matrix>(alpha: 1, row: 2, column: 8).visible();
}

output

[
 [ 1.03756  0.66498  6.86990  0.72205  1.37044 83.75532  0.82821  0.91106]
 [ 0.80854  2.80326  0.72205  2.69117  6.89905  0.71063  2.93813  2.07763]
]

下一篇:可视化的抽象实现