首页 > 解决方案 > Kotlin 函数向量点积

问题描述

我有一个 Kotlin Vector 类,其中包含一个计算两个向量的点积的函数:

class Vector(val values: Array<Double>) {

    fun dot(v: Vector): Double {
        require(this.values.size == v.values.size)
        var product = 0.0
        for (i in this.values.indices) {
            product += this.values[i] * v.values[i]
        }
        return product
    }
}

我想以函数式的方式表达两个向量的点积。折叠会初始化,但我不知道如何使它与两个数组一起工作。

有人有建议吗?

标签: kotlinfunctional-programminglinear-algebra

解决方案


我会zip这两个数组,然后使用sumByDouble

fun dot(v: Vector): Double = values
    .apply { require(size == v.values.size) }
    .zip(v.values)
    .sumByDouble { (a, b) -> a * b }

旁注:如果你在 JVM 上,你可以考虑使用DoubleArray代替Array<Double>. 前者将在 JVM 上表示为 a ,而不是一个装箱的 sdouble[]数组。Double


推荐阅读