You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中使用OnnxTensor值遇类型转换问题求助

在Kotlin中处理onnxruntime-android的float[][]输出结果

问题原因

onnxruntime-android返回的输出张量值是Java基本类型的float[][]数组,而你尝试强转的Array<Array<Float>>是Kotlin的包装类型数组(对应Java的Float[][]),这两种类型属于不同的类型体系,无法直接强制转换,因此抛出ClassCastException。直接用包装类型数组索引也会因为类型不匹配导致编译错误。

解决方案

有两种简单的方式获取目标数值:

方式1:直接强转为基本类型二维数组

将输出张量的值强转为float[][](注意是小写的float,对应基本类型),之后直接通过索引访问元素:

val result = ortSession.run(inputs)
// 获取输出张量并强转为基本类型二维float数组
val probArray = result.get(0).value as float[][]
// 索引获取单个元素
val probability = probArray[0][0]

方式2:使用Tensor的getFloat方法直接取值

如果只需要张量中特定位置的元素,可以跳过数组转换,直接调用Tensor的getFloat()方法并传入维度索引:

val result = ortSession.run(inputs)
val outputTensor = result.get(0)
// 获取第0维度、第1维度索引为0的元素(对应2D张量的[0][0])
val probability = outputTensor.getFloat(0, 0)

额外提示

如果需要确认输出张量的形状是否符合预期,可以先获取张量的形状信息:

val outputTensor = result.get(0)
val tensorShape = outputTensor.shape
// 验证是否是单个元素的2D张量(形状为[1, 1])
if (tensorShape contentEquals longArrayOf(1, 1)) {
    // 执行后续取值逻辑
}

内容的提问来源于stack exchange,提问作者jojeyh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:20:05