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 或者需要更多统计功能,推荐使用该库提供的方法。