Kotlin是否有类似NumPy中argmax方法的内置函数?
Kotlin中实现类似NumPy argmax的功能
首先得说,Kotlin标准库里并没有直接对应NumPy argmax的现成内置函数,但咱们完全可以用Kotlin自带的集合操作符快速实现一模一样的效果,不管是一维还是二维数组的场景都能搞定。
1. 一维数组(对应np.argmax(mat))
如果是处理一维的数组或列表,咱们可以用withIndex()把元素的索引和值绑定起来,再找出最大值对应的索引:
val arr = intArrayOf(4, 8, 1, 5, 10, 6) val argmax = arr.withIndex() .maxByOrNull { it.value } ?.index ?: -1 // 数组为空时返回-1,你也可以换成自己需要的默认值 println(argmax) // 输出4,和你给出的NumPy结果一致
2. 二维数组(对应np.argmax(mat, axis=1))
要是需要像NumPy那样每行找最大值的索引,咱们只需要遍历每一行,对每行套用上面的一维逻辑就行:
val mat = arrayOf( intArrayOf(4, 8, 1), intArrayOf(5, 10, 6) ) val argmaxPerRow = mat.map { row -> row.withIndex() .maxByOrNull { it.value } ?.index ?: -1 }.toIntArray() println(argmaxPerRow.contentToString()) // 输出[1, 1],和NumPy的输出完全一致
3. 关于Kotlin的NumPy绑定
你提到的NumPy Kotlin绑定确实可能还没完全实现所有NumPy函数,但上面的原生Kotlin实现已经能覆盖argmax的核心需求了,而且不需要依赖额外的绑定库,代码还更轻量化。
如果之后需要处理更复杂的数值计算场景,也可以看看Kotlin的KMath库,它有更贴近NumPy风格的API,但基础场景下原生实现就足够好用啦。
内容的提问来源于stack exchange,提问作者dzsezusz
相关产品推荐
相关产品推荐

