2009-11-12 10 views
1

J'ai un tableau créé en MATLAB qui contient un certain nombre d'objets de type cellule qui contiennent des tableaux de doubles. Il s'agit essentiellement d'un tableau de cellules 1xn < et chaque cellule est un tableau de doubles. Ce que je veux faire est d'exporter en quelque sorte ceux-ci afin que je puisse ensuite insérer les données dans Java comme un tableau ragged de tableaux de type int. Une pensée sur la meilleure façon de faire cela?MATLAB: Obtention d'un tableau de cellules de MATLAB à Java

Répondre

2

Il est difficile de construire un tableau Java de primitives dans Matlab, parce que Matlab veut AutoBox revenir dans un tableau Matlab.

Ce que vous pouvez faire est de créer une classe Java pour vous aider, en utilisant les signatures de méthodes pour guider l'autoboxing de Matlab. Une couche d'enveloppe comme celle-ci peut être plus rapide et plus pratique qu'un aller-retour à travers une exportation de texte.

package test; 

/** 
* Class to help build Java arrays from Matlab. 
*/ 
public class JavaArrayBuilder { 
    /** 
    * Assign an array into a larger ragged array 
    * @param array ragged array you're building 
    * @param i index into array 
    * @param subarray this gets autoboxed to int[] from Matlab 
    */ 
    public static void assignIntArray(Object[] array, int i, int[] subarray) { 
     array[i] = subarray; 
    } 
} 

Ensuite, vous pouvez l'appeler depuis Matlab comme ceci.

function ja = build_int_array 

mynums = { 1:2, 1:5, 1:7 }; 
% Create a Java array of arrays 
dummy = java.lang.Object(); 
ja = java.lang.reflect.Array.newInstance(dummy.getClass(), numel(mynums)); 
for i = 1:numel(mynums) 
    test.JavaArrayBuilder.assignIntArray(ja, i-1, mynums{i}); 
end 
% Now you have a Java ragged array, albeit as Object[] instead of int[][] 

Ensuite, vous devrez reconvertir à un tableau Matlab l'objet [] tableau int [] [] au sein de Java, parce que Matlab va unbox Java int [] []. Le garder comme Objet [] dans le M-code le protège.

Vous pouvez également créer une liste ou une autre collection à l'aide de wrappers similaires. Cela pourrait mieux s'imbriquer avec votre autre code Java, et Collections ne le fait pas dans Matlab.

+0

Je vais essayer pendant le week-end si j'ai le temps et revenir vers vous – Bar

0

Eh bien, je veux travailler à partir de Java et non Matlab donc ce que je l'ai été, j'adapté le code de cell2cvs par Sylvain Fiedler et a obtenu ce pour faire le travail, il obtient le réseau de cellules et génère un fichier txt.

function cell2txt(datName,cellArray) 
% Writes cell array content into a *.txt file. 
% 
% CELL2CSV(datName,cellArray,seperator,excelVersion) 
% 
% datName  = Name of the file to save. [ i.e. 'text.csv' ] 
% cellarray = Name of the Cell Array where the data is in 
% 
%   by Sylvain Fiedler, KA, 2004 
% updated by Sylvain Fiedler, Metz, 06 
% fixed the logical-bug, Kaiserslautern, 06/2008, S.Fiedler 

seperator1 = ','; 
seperator2 = '\n'; 

datei = fopen(datName,'w'); 

for z=1:size(cellArray,1) 
    for s=1:size(cellArray,2) 

     var = eval(['cellArray{z,s}']); 

     if size(var,1) == 0 
      var = ''; 
     end 

     if isnumeric(var) == 1 
      var = num2str(var); 
      %fprintf(datei,seperator1); 
     end 

     fprintf(datei,var); 

     if s ~= size(cellArray,2) 
      fprintf(datei,seperator2); 

     end 
    end 
end 
fclose(datei); 

Followup question here

Questions connexes