简体   繁体   English

关于使用 C#(Xamarin 开发环境)从浮点矩阵转换为 Java.Lang.Object 的问题

[英]Issue regarding the cast from a float matrix to a Java.Lang.Object using C# (Xamarin development environment)

Is it possible to convert a multidimensional float matrix to a Java.Lang.Object in C#?是否可以在 C# 中将多维浮点矩阵转换为 Java.Lang.Object?
The neural network I use (.tflite format) is correctly loaded and to make inference two Java.Lang.Object are requested as Input parameters, hereafter InputObj01 and InputObj02:我使用的神经网络(.tflite 格式)已正确加载,为了进行推理,请求两个 Java.Lang.Object 作为输入参数,以下称为 InputObj01 和 InputObj02:

  1. InputObj01 --> Input to be classified. InputObj01 --> 要分类的输入。 In my case Matrix Dimensions: [1, 4000, 2]在我的情况下矩阵维度:[1, 4000, 2]
  2. InputObj02 --> Output Model. InputObj02 --> 输出模型。 In my case Matrix Dimension: [1, 4000]在我的情况下矩阵维度:[1, 4000]

I found no problems converting InputObj02 to Java.Lang.Object, using the following steps:我发现使用以下步骤将 InputObj02 转换为 Java.Lang.Object 没有问题:

float[][] Input02 = new float[][]{ new float[4000] };  
var InputObj02 = Arrays.FromArray<float[]>(Input02);

But if I try to use the same technique to get InputObj01, in the following way:但是,如果我尝试使用相同的技术来获取 InputObj01,请按以下方式:

float[][,] Input01 = new float[][,]{ new float[4000, 2] };
var InputObj01 = Arrays.FromArray<float[,]>(Input01)

the following exception is thrown:抛出以下异常:

**System.InvalidCastException:** 'Specified cast is not valid.'

Using directive:使用指令:

using System;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
using Android.Widget;                                            
using System.IO;                                                
using Android.Content.Res;                                      
using Java.IO;                                                  
using Java.Nio.Channels;                                        
using Java.Nio;                                                 
using Xamarin.TensorFlow.Lite;
using Java.Util;

For your needs, it may be easier to just use a simple loop:根据您的需要,使用简单的循环可能更容易:

        float[][,] Input01 = new float[][,] { new float[4000, 2] };
        List<float[,]> newList = new List<float[,]>();

        foreach (float[,] array in Input01)
        {
                newList.Add(array);
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM