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
相关产品推荐
相关产品推荐

