2009-02-02 5 views
3

J'ai un peu de code qui fonctionne en 10.919 s. Il montre que le profilage 10.182 s sont gaspillées dansPasser un million de nombres de java à matlab?

opaque.double 

qui est appelé quand j'utilise

jClass.GetArrays(jArray1,jArray2); 

struct.prop1 = double(jArray1); 
struct.prop2 = double(jArray1); 

Que peut-on faire? Je dois utiliser Java pour interagir avec l'API externe.


EDIT: J'utilise le hack suivant:

struct.prop1 = cell2mat(cell(jArray1)); 


Et est descendu à 1.5s/2.2s

EDIT:

Faire la java retour longue délimité par des virgules représentation sous forme de chaîne des tableaux, puis utilisation

data = strread(char(jString),'%f','delimiter',','); 

Produit performances presque supportable

Répondre

1

Vous pourriez envisager de l'enregistrer dans un fichier, puis la lecture dans l'autre extrémité. Il peut également être lent (surtout si un réseau est impliqué), mais ça vaut le coup.

Vous pouvez également envisager de le convertir en un blob de données binaires, puis de le transmettre et de le convertir.

Je soupçonne que cette mauvaise performance passe chaque élément de la matrice dans sa propre transaction plutôt que tous en même temps.

-Adam

3

Le problème réside dans l'utilisation de primitives Java en boîte - java.lang.Double dans ce cas.

La simple modification de la signature de Java de Double à Double permet à Matlab de fonctionner de manière transparente avec le tableau sans le surdébit de conversion.

Questions connexes