我试图弄清楚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?
答案 0 :(得分:5)
let arr = b :?> float[]
向下转换运算符为:?>
答案 1 :(得分:0)
为了完整起见,您还可以使用downcast
。当已经可以推断出演员的类型时,我更喜欢这个。如果您以后更改类型,则需要更改一个地方。