Перенос данных с сервера приложений Matlab на F # - PullRequest
2 голосов
/ 15 ноября 2011

Я пытаюсь испачкать руки совместимостью между сервером .net-приложений Matlab и F # -скриптом.В настоящее время я застрял с проблемой передачи данных.Если я открою новый Matlab-экземпляр в F # -интерактиве:

#I @"C:\Program Files\MATLAB\R2010a\bin\win64";;
#r @"MLApp.dll";;
let matlab=new MLApp.MLAppClass();;

И затем я создам Matlab-Array:

matlab.Execute("a=[1 2 3 4 5;6 7 8 9 10]");;

Следующий шаг для передачи массива Matlab в.net будет

let b =matlab.GetVariable("a","base");;

Вот когда начинается проблема.Переменная 'b' будет иметь тип 'object', предоставляя только общий интерфейс типа .net-object.Как я могу получить числовой массив из этой переменной?Есть ли способ применить downcast к 'float'?

Редактировать:

Хорошо, есть еще одна вещь, которую я не понимаю: после применения downcast массив имеет тип array2D, float [,].Но отображается ли массив следующим образом:

arr;;
val it : float [,] = [[1.0; 2.0; 3.0]
                      [4.0; 5.0; 6.0]]

Для прямоугольного массива я привык получать что-то вроде этого

arr;;
                    = [|[|1.0; 2.0; 3.0|]
                      [|4.0; 5.0; 6.0|]|]

В чем разница между этими типами?И почему я не могу применить нарезку массива к arr типа float [,]?

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011
let arr = b :?> float[]

Оператор отката - :?>

0 голосов
/ 15 ноября 2011

Просто для полноты вы также можете использовать downcast.Я предпочитаю это, когда тип броска уже может быть выведен.Если вы позже измените тип, вам нужно будет поменять его на одно место меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...