kotlin - 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
}
}
我想以函数式的方式表达两个向量的点积。折叠会初始化,但我不知道如何使它与两个数组一起工作。
有人有建议吗?
解决方案
我会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
推荐阅读
- jquery - 在 Webpack 中使用 JQuery 插件
- python - 其他类中的类中的 NameError
- javascript - 使用 JavaScript 检测互联网连接状态
- hp-ux - HP-UX 修复带有故障主磁盘的镜像磁盘集上的陈旧扩展区
- javascript - 如何在 THREE.js 中对加载图像的纹理获得 Clamp-To-Border 效果?
- android - 有没有一种优雅的方法可以让 Android 屏幕阅读器尊重 Chrome 上 aria-hidden 的更改?
- python-3.x - Keras 模型错误:TypeError:load_weights() 缺少 1 个必需的位置参数:'filepath'
- dart - 有没有办法为类中的静态变量运行异步函数?
- javascript - 如何在 Firefox Web 控制台上搜索消息?
- d3.js - 具有属性的 D3 可折叠树