Проблема, связанная с приведением матрицы с плавающей точкой к объекту Java.Lang.с использованием C# (среда разработки Xamarin)

#java #c# #xamarin #casting #tensorflow-lite

Вопрос:

Можно ли преобразовать многомерную матрицу с плавающей запятой в объект Java.Lang.в C#?
Используемая мной нейронная сеть (формат.tflite) загружена правильно, и для вывода в качестве входных параметров запрашиваются два Java.Lang.объекта, далее InputObj01 и InputObj02:

  1. InputObj01 —gt; Ввод, подлежащий классификации. В моем случае Размеры матрицы: [1, 4000, 2]
  2. InputObj02 —gt; Модель вывода. В моем случае Размер матрицы: [1, 4000]

Я не обнаружил проблем с преобразованием InputObj02 в Java.Lang.Object, выполнив следующие действия:

 float[][] Input02 = new float[][]{ new float[4000] };  var InputObj02 = Arrays.FromArraylt;float[]gt;(Input02);  

Но если я попытаюсь использовать ту же технику, чтобы получить InputObj01, следующим образом:

 float[][,] Input01 = new float[][,]{ new float[4000, 2] }; var InputObj01 = Arrays.FromArraylt;float[,]gt;(Input01)  

возникает следующее исключение:

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

Использование директивы:

 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;  

Комментарии:

1. Привет @matpa_, я не получал от тебя вестей уже пару дней. Пожалуйста, дайте мне знать, если я могу чем-то помочь здесь.

2. @JessieZhang-MSFT Спасибо за ответ, но это решение не идеально в моей ситуации. По другим причинам мы перешли к собственной разработке, и эта точная проблема не была создана в среде Android и среде iOS.

Ответ №1:

Для ваших нужд может быть проще просто использовать простой цикл:

 float[][,] Input01 = new float[][,] { new float[4000, 2] };  Listlt;float[,]gt; newList = new Listlt;float[,]gt;();   foreach (float[,] array in Input01)  {  newList.Add(array);  }