2011-11-15 40 views
2

我试图让我的手变得与Matlab的.net-应用服务器和F#脚本之间的互操作性变得肮脏。 目前,我遇到了数据传输问题。 如果我在F#-interactive打开一个新的Matlab的实例:将数据从Matlab应用服务器传输到F#

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

然后我创建了一个Matlab的数组:

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

下一步的Matlab的阵列转移到.NET会be

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

这是问题出现的时间。变量'b'将是类型'对象',仅提供.net对象类型的通用接口。 如何从这个变量中获取一个数组数组?有什么办法可以将downcast应用到'数组浮点'?

编辑:

好,有一两件事我不理解:在施加所述向下转换阵列后具有类型array2D,浮[,]。但会显示这样的数组:

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?

回答

5
let arr = b :?> float[] 

丧气运营商:?>

+0

是的,谢谢!通过强制类型float [,]它可以工作! – user1047427

0

只是为了保持完整性,您也可以使用downcast。当我们已经推断出演员的类型时,我更喜欢这一点。如果您以后改变类型,那么您需要更改一个地方。

相关问题