stats

描述性统计

corr - 数组元素的皮尔逊相关系数

状态

实验性

描述

返回 array 沿维度 dim 的元素的皮尔逊相关系数,如果 mask 中的对应元素为 true

array 的两行(或列),例如 xy 之间的皮尔逊相关系数定义为

 corr(x, y) = cov(x, y) / sqrt( var(x) * var(y))

语法

result = corr (array, dim [, mask])

泛型子例程

参数

array:应为类型为 integerrealcomplex 的秩 1 或秩 2 数组。它是一个 intent(in) 参数。

dim:应为类型为 integer 的标量,其值为 1 到 n 之间,其中 narray 的秩。它是一个 intent(in) 参数。

mask(可选):应为类型为 logical 的标量或与 array 形状相同的数组。它是一个 intent(in) 参数。

返回值

如果 array 的秩为 1 且类型为 realcomplex,则结果的类型为 real 且与 array 的种类相同。如果 array 的秩为 2 且类型为 realcomplex,则结果的类型和种类与 array 相同。如果 array 的类型为 integer,则结果的类型为 real(dp)

如果 array 的秩为 1 且大小大于 1,则返回等于 1 的标量。否则,返回 IEEE NaN。如果 array 的秩为 2,则返回具有相应相关性的秩 2 数组。

如果指定了 mask,则结果是 array 中所有对应于 masktrue 元素的元素的皮尔逊相关系数。如果 mask 的每个元素都为 false,则结果为 IEEE NaN

示例

program example_corr
  use stdlib_stats, only: corr
  implicit none
  real :: x(1:6) = [1., 2., 3., 4., 5., 6.]
  real :: y(1:2, 1:3) = reshape([-1., 40., -3., 4., 10., 6.], [2, 3])
  print *, corr(x, 1)           !returns 1.
  print *, corr(y, 2)           !returns reshape([ 1., -.32480, -.32480, 1. ], [ 2, 3])
end program example_corr

cov - 数组元素的协方差

状态

实验性

描述

返回 array 沿维度 dim 的元素的协方差,如果 mask 中的对应元素为 true

默认情况下,协方差定义为

 cov(array) = 1/(n-1) sum_i (array(i) - mean(array) * (array(i) - mean(array)))

其中 n 是元素的数量。

可以使用逻辑参数 corrected 更改缩放。如果 corrected.false.,则总和按 n 缩放,否则按 n-1 缩放。

语法

result = cov (array, dim [, mask [, corrected]])

泛型子例程

参数

array:应为类型为 integerrealcomplex 的秩 1 或秩 2 数组。它是一个 intent(in) 参数。

dim:应为类型为 integer 的标量,其值为 1 到 n 之间,其中 narray 的秩。它是一个 intent(in) 参数。

mask(可选):应为类型为 logical 的标量或与 array 形状相同的数组。它是一个 intent(in) 参数。

corrected(可选):应为类型为 logical 的标量。如果 corrected.true.(默认值),则总和按 n-1 缩放。如果 corrected.false.,则总和按 n 缩放。它是一个 intent(in) 参数。

返回值

如果 array 的秩为 1 且类型为 realcomplex,则结果的类型为 real,对应于 array 的类型。如果 array 的秩为 2 且类型为 realcomplex,则结果的类型与 array 相同。如果 array 的类型为 integer,则结果的类型为 real(dp)

如果 array 的秩为 1,则返回包含 array 中所有元素的协方差(即方差)的标量。如果 array 的秩为 2,则返回秩 2 数组。

如果指定了 mask,则结果是 array 中所有对应于 masktrue 元素的元素的协方差。如果 mask 的每个元素都为 false,则结果为 IEEE NaN

示例

program example_cov
  use stdlib_stats, only: cov
  implicit none
  real :: x(1:6) = [1., 2., 3., 4., 5., 6.]
  real :: y(1:2, 1:3) = reshape([1., 2., 3., 4., 5., 6.], [2, 3])
  print *, cov(x, 1)                          !returns 3.5
  print *, cov(x, 1, corrected=.false.)     !returns 2.9167
  print *, cov(y, 1)                          !returns a square matrix of size 3 with all elements equal to 0.5
end program example_cov

mean - 数组元素的平均值

状态

实验性

描述

返回 array 所有元素的平均值,或者如果提供,则返回 array 沿维度 dim 的元素的平均值,如果 mask 中的对应元素为 true

语法

result = mean (array [, mask])

result = mean (array, dim [, mask])

泛型子例程

参数

array:应为类型为 integerrealcomplex 的数组。它是一个 intent(in) 参数。

dim:应为类型为 integer 的标量,其值为 1 到 n 之间,其中 narray 的秩。它是一个 intent(in) 参数。

mask(可选):应为类型为 logical 的标量或与 array 形状相同的数组。它是一个 intent(in) 参数。

返回值

如果 array 的类型为 realcomplex,则结果的类型与 array 相同。如果 array 的类型为 integer,则结果的类型为 real(dp)

如果省略 dim,则返回包含 array 中所有元素的平均值的标量。否则,返回秩为 n-1 的数组,其中 n 等于 array 的秩,并且形状类似于 array,但省略了维度 dim

如果指定了 mask,则结果是 array 中所有对应于 masktrue 元素的元素的平均值。如果 mask 的每个元素都为 false,则结果为 IEEE NaN

示例

program example_mean
  use stdlib_stats, only: mean
  implicit none
  real :: x(1:6) = [1., 2., 3., 4., 5., 6.]
  real :: y(1:2, 1:3) = reshape([1., 2., 3., 4., 5., 6.], [2, 3])
  print *, mean(x)                                  !returns 3.5
  print *, mean(y)                                  !returns 3.5
  print *, mean(y, 1)                               !returns [ 1.5, 3.5, 5.5 ]
  print *, mean(y, 1, y > 3.)                       !returns [ NaN, 4.0, 5.5 ]
end program example_mean

median - 数组元素的中位数

状态

实验性

描述

返回 array 所有元素的中位数,或者如果提供,则返回 array 沿维度 dim 的元素的中位数,如果 mask 中的对应元素为 true

array 元素的中位数定义为“中间”元素,在元素按升序排序后,例如 array_sorted = sort(array)。如果 n = size(array) 是偶数,则中位数为

median(array) = array_sorted( floor( (n + 1) / 2.))

如果 n 是奇数,则中位数为

median(array) = mean( array_sorted( floor( (n + 1) / 2.):floor( (n + 1) / 2.) + 1 ) )

当前实现依赖于在整个数组的副本上应用的选择算法,使用 stdlib_selection 模块提供的 select 子例程。

语法

result = median (array [, mask])

result = median (array, dim [, mask])

泛型子例程

参数

array:应为类型为 integerreal 的数组。它是一个 intent(in) 参数。

dim:应为类型为 integer 的标量,其值为 1 到 n 之间,其中 narray 的秩。它是一个 intent(in) 参数。

mask(可选):应为类型为 logical 的标量或与 array 形状相同的数组。它是一个 intent(in) 参数。

返回值

如果 array 的类型为 real,则结果的类型为 real,且种类与 array 相同。如果 array 的类型为 real 且包含 IEEE NaN,则结果为 IEEE NaN。如果 array 的类型为 integer,则结果的类型为 real(dp)

如果省略 dim,则返回包含 array 中所有元素的中位数的标量。否则,返回秩为 n-1 的数组,其中 n 等于 array 的秩,并且形状类似于 array,但省略了维度 dim

如果指定了 mask,则结果是 array 中所有对应于 masktrue 元素的元素的中位数。如果 mask 的每个元素都为 false,则结果为 IEEE NaN

示例

program example_median
  use stdlib_stats, only: median
  implicit none
  real :: x(1:6) = [1., 2., 3., 4., 5., 6.]
  real :: y(1:2, 1:3) = reshape([1., 2., 3., 4., 5., 6.], [2, 3])
  print *, median(x)                                  !returns 3.5
  print *, median(y)                                  !returns 3.5
  print *, median(y, 1)                               !returns [ 1.5, 3.5, 5.5 ]
  print *, median(y, 1, y > 3.)                        !returns [ NaN, 4.0, 5.5 ]
end program example_median

moment - 数组元素的中心矩

状态

实验性

描述

返回 array 所有元素的 k 阶中心矩,或者如果提供,则返回 array 沿维度 dim 的元素的 k 阶中心矩,如果 mask 中的对应元素为 true

如果提供标量或数组 center,则该函数返回 array 所有元素的 k 阶矩关于 'center' 的值,或者如果提供,则返回 array 沿维度 dim 的元素的 k 阶矩关于 'center' 的值,如果 mask 中的对应元素为 true

k 阶中心矩定义为

 moment(array) = 1/n sum_i (array(i) - mean(array))^k

其中 n 是元素的数量。

k 阶矩关于 center 的值定义为

 moment(array) = 1/n sum_i (array(i) - center)^k

语法

result = moment (array, order [, center [, mask]])

result = moment (array, order, dim [, center [, mask]])

泛型子例程

参数

array:应为类型为 integerrealcomplex 的数组。

order:应为类型为 integer 的标量。

dim:应为类型为 integer 的标量,其值为 1 到 n 之间,其中 narray 的秩。

center(可选):如果未提供 dim,则应为与 result 类型相同的标量。如果提供 dim,则 center 应为标量或数组(形状类似于 array,但省略了维度 dim),且类型与 result 相同。

mask(可选):应为类型为 logical 的标量或与 array 形状相同的数组。

返回值

如果 array 的类型为 realcomplex,则结果的类型与 array 相同。如果 array 的类型为 integer,则结果的类型为 real(dp)

如果省略 dim,则返回包含 array 中所有元素的 k 阶(中心)矩的标量。否则,返回秩为 n-1 的数组,其中 n 等于 array 的秩,并且形状类似于 array,但省略了维度 dim

如果指定了 mask,则结果是 array 中所有对应于 masktrue 元素的元素的 k 阶(中心)矩。如果 mask 的每个元素都为 false,则结果为 IEEE NaN

示例

program example_moment
  use stdlib_stats, only: moment
  implicit none
  real :: x(1:6) = [1., 2., 3., 4., 5., 6.]
  real :: y(1:2, 1:3) = reshape([1., 2., 3., 4., 5., 6.], [2, 3])
  print *, moment(x, 2)                            !returns 2.9167
  print *, moment(y, 2)                            !returns 2.9167
  print *, moment(y, 2, 1)                         !returns [0.25, 0.25, 0.25]
  print *, moment(y, 2, 1, mask=(y > 3.))        !returns [NaN, 0., 0.25]
  print *, moment(x, 2, center=0.)               !returns 15.1667
  print *, moment(y, 1, 1, center=0.)            !returns [1.5, 3.5, 5.5]
end program example_moment

var - 数组元素的方差

状态

实验性

描述

返回 array 所有元素的方差,或者如果提供,则返回 array 沿维度 dim 的元素的方差,如果 mask 中的对应元素为 true

默认情况下,方差定义为最佳无偏估计量,并计算为

 var(array) = 1/(n-1) sum_i (array(i) - mean(array))^2

其中 n 是元素的数量。

使用 n-1 来进行缩放称为贝塞尔校正。可以使用逻辑参数 corrected 更改缩放。如果 corrected.false.,则总和按 n 缩放,否则按 n-1 缩放。

语法

result = var (array [, mask [, corrected]])

result = var (array, dim [, mask [, corrected]])

泛型子例程

参数

array:应为类型为 integerrealcomplex 的数组。它是一个 intent(in) 参数。

dim:应为类型为 integer 的标量,其值为 1 到 n 之间,其中 narray 的秩。它是一个 intent(in) 参数。

mask(可选):应为类型为 logical 的标量或与 array 形状相同的数组。它是一个 intent(in) 参数。

corrected(可选):应为类型为 logical 的标量。如果 corrected.true.(默认值),则总和按 n-1 缩放。如果 corrected.false.,则总和按 n 缩放。它是一个 intent(in) 参数。

返回值

如果 array 的类型为 realcomplex,则结果的类型为 real,对应于 array 的类型。如果 array 的类型为 integer,则结果的类型为 real(dp)

如果dim缺失,则返回包含array中所有元素方差的标量。否则,返回一个秩为n-1的数组,其中n等于array的秩,且形状类似于array,但dim维度被删除。

如果指定了mask,则结果是array中对应于masktrue元素的所有元素的方差。如果mask的每个元素都是false,则结果为IEEE NaN

如果方差仅使用单个元素计算,则如果corrected.true.,则结果为IEEE NaN;如果corrected.false.,则结果为0.

示例

program example_var
  use stdlib_stats, only: var
  implicit none
  real :: x(1:6) = [1., 2., 3., 4., 5., 6.]
  real :: y(1:2, 1:3) = reshape([1., 2., 3., 4., 5., 6.], [2, 3])
  print *, var(x)                                  !returns 3.5
  print *, var(x, corrected=.false.)             !returns 2.9167
  print *, var(y)                                  !returns 3.5
  print *, var(y, 1)                               !returns [0.5, 0.5, 0.5]
  print *, var(y, 1, y > 3.)                       !returns [NaN, NaN, 0.5]
  print *, var(y, 1, y > 3., corrected=.false.)    !returns [NaN, 0., 0.25]
end program example_var