2011-11-15 2 views
2

J'essaie de me salir les mains avec l'interopérabilité entre le serveur .net-Application de Matlab et l'écriture F #. Actuellement, je suis coincé avec un problème de transfert de données. Si j'ouvre un nouveau Matlab instance en F # -interactive:Transfert de données de Matlab Application Server vers F #

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

Et puis-je créer un Matlab-Array:

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

L'étape suivante pour transférer le Matlab-tableau à .net serait être

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

Voici quand le problème commence. La variable 'b' sera de type 'object', fournissant uniquement l'interface générique d'un type .net-object. Comment puis-je récupérer un tableau numérique à partir de cette variable? Y a-t-il un moyen d'appliquer un downcast à 'array float'?

Edit:

D'accord, il y a une chose que je ne comprends pas: Après avoir appliqué le tableau baissés a le type array2D, float [,]. Mais est-ce le tableau affiché comme ceci:

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

Pour un tableau rectangulaire, je suis habitué à obtenir quelque chose comme ça

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

Où est la différence entre ces types? Et pourquoi ne puis-je pas appliquer un découpage de tableau à arr de type float [,]?

Répondre

5
let arr = b :?> float[] 

L'opérateur baissés est :?>

+0

Oui, merci! Avec cast pour taper float [,] ça marche! – user1047427

0

Juste pour être complet, vous pouvez également utiliser downcast. Je préfère cela lorsque le type de la distribution peut déjà être déduit. Si vous changez plus tard le type il y a un endroit de moins que vous auriez besoin de le changer.

Questions connexes