将数据从Matlab Application Server传输到F#

时间:2011-11-15 11:11:19

标签: .net matlab f#

我试图弄清楚Matlab的.net-Application服务器和F#-scripting之间的互操作性。 目前,我遇到了数据传输问题。 如果我在F#中打开一个新的Matlab实例 - 交互式:

#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'将是Type'object',仅提供.net-object类型的通用接口。 如何从此变量中检索数字数组?有没有办法将downcast应用于'array float'?

编辑:

好的,还有一件事我不明白:在应用了向下转换后,数组的类型为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|]|]

这些类型之间的区别在哪里?为什么我不能将数组切片应用于float [,]类型的arr?

2 个答案:

答案 0 :(得分:5)

let arr = b :?> float[]

向下转换运算符为:?>

答案 1 :(得分:0)

为了完整起见,您还可以使用downcast。当已经可以推断出演员的类型时,我更喜欢这个。如果您以后更改类型,则需要更改一个地方。