1. 简介

在编程中,计算标准差是一项关键的统计任务,当我们需要衡量一组数据相对于其平均值的离散程度时,标准差非常有用。

在 Kotlin 中,有多种方式可以计算数组形式表示的一组数字的标准差。本文将介绍其中几种常见方法。

2. 标准差的定义与公式

标准差用于衡量数据集中数据的离散程度。我们可以通过计算方差的平方根来得到标准差。而方差是每个数据点与平均值之差的平方的平均值。

数学上,方差的公式为:

variance = Σ(x - μ)² / N

其中:

  • Σ 表示所有数据点的累加
  • x 表示单个数据点
  • μ 表示数据集的平均值
  • N 表示数据点的总数

因此,标准差的数学表达式为:

standard deviation = √variance

3. 使用 Kotlin 标准库

Kotlin 的标准库提供了丰富的数学函数,我们可以利用这些函数来手动实现标准差的计算。

主要用到的函数包括:

  • average():计算平均值
  • map():对每个元素进行操作
  • pow(2):计算平方
  • Math.sqrt():计算平方根

下面是完整的实现代码:

fun standardDeviationUsingMathPackage(numbers: DoubleArray): Double {
    val mean = numbers.average()
    val variance = numbers.map { (it - mean).pow(2) }.average()
    return Math.sqrt(variance)
}

✅ 示例测试代码

@Test
fun `standard deviation using the math package`() {
    val dataset1 = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
    val dataset2 = doubleArrayOf(11.0, 14.0, 19.0, 23.0, 28.0, 30.0)

    assertEquals(1.707825127659933, standardDeviationUsingMathPackage(dataset1))
    assertEquals(6.914156170897181, standardDeviationUsingMathPackage(dataset2))
}

这个方法适用于不需要引入额外依赖的场景,适合轻量级项目使用。

4. 使用 Apache Commons Math 库

如果你的项目已经使用了 Apache Commons Math 或者需要更复杂的统计功能,那么使用这个库会更加方便和专业。

4.1. Maven 与 Gradle 配置

Maven

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>

Gradle

implementation 'org.apache.commons:commons-math3:3.6.1'

4.2. 实现方式

使用 Apache Commons Math 计算标准差非常简洁:

fun calculateStandardDeviationUsingApacheCommonsMath(dataset: DoubleArray): Double {
    val sd = StandardDeviation(false)
    return sd.evaluate(dataset)
}
  • StandardDeviation(false) 表示我们计算的是总体标准差(population standard deviation),即公式中除以 N。
  • 若设置为 true,则表示是样本标准差(sample standard deviation),除以 N-1。

✅ 示例测试代码

@Test
fun `standard deviation using the apache commons math library`() {
    val dataset1 = doubleArrayOf(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
    val dataset2 = doubleArrayOf(11.0, 14.0, 19.0, 23.0, 28.0, 30.0)

    assertEquals(1.707825127659933, calculateStandardDeviationUsingApacheCommonsMath(dataset1))
    assertEquals(6.914156170897181, calculateStandardDeviationUsingApacheCommonsMath(dataset2))
}

⚠️ 踩坑提示

  • 注意 StandardDeviation 默认构造函数是 true,即默认计算的是样本标准差。
  • 如果你明确知道处理的是总体数据,一定要传入 false,否则结果会与预期不符。

5. 总结

本文介绍了两种在 Kotlin 中计算标准差的方法:

方法 优点 缺点
Kotlin 标准库 无需依赖,轻量级 需要手动实现逻辑
Apache Commons Math 功能强大,专业可靠 需引入额外依赖

✅ 如果你追求简洁、轻量,推荐使用 Kotlin 标准库实现。
✅ 如果你已经在项目中使用了 Apache Commons Math 或者需要更多统计功能,推荐使用该库提供的方法。


原始标题:How to Calculate Standard Deviation in Kotlin