2011-02-02 13 views
5

Tengo una matriz Java (my_array en el ejemplo a continuación) en mi espacio de trabajo MATLAB que me gustaría convertir de nuevo a una matriz MATLAB.Pasar de los tipos Java a los tipos MATLAB

whos my_array 

    Name  Size   Class          

    my_array 20000x1   java.lang.Object[] 

No pude encontrar la forma de convertir tipos de Java a tipos de MATLAB en la documentación de Interfaces externas. Lo único que encontré es this (la documentación sobre las células MATLAB) que dice que puedo usar células MATLAB para realizar esta tarea.

El uso de MATLAB cells parece excesivo, especialmente cuando manejo miles de elementos del mismo tipo (en este caso, double). ¿Hay alguna otra forma de mover los objetos Java de vuelta a los tipos nativos de MATLAB?

Respuesta

6

Ejemplo:

%# example Object[] array 
my_array = javaArray('java.lang.Object', 5); 
for i=1:5, my_array(i) = java.lang.Double(i); end 

%# convert to MATLAB vector 
M = arrayfun(@(x)x, my_array); 

%# or equivalently 
M = cell2mat(cell(my_array)); 

>> whos M 
    Name  Size   Bytes Class  Attributes 

    M   5x1    40 double  
+0

El segundo ('cell2mat (celular (...))') es mejor, ya que también funciona para matrices 2D. – luator

2

cuando estoy manejando miles de elementos del mismo tipo (en este caso, haga doble)

¿Estás en el control del código Java en cuestión? Si este es el caso, devuelva una matriz double[] en lugar de una matriz Double[] o una matriz Object[] - MATLAB convertirá automáticamente una matriz double[] en un vector de dobles de MATLAB.

+0

¿Cómo crearía un 'double []' en matlab? –

1

tenga en cuenta que puede usar la función doble en matlab para convertir tipos de java neumeric a matlab interno.

ref http://www.kxcad.net/cae_MATLAB/techdoc/matlab_external/f6671.html#bq__508-1

function rv = convertJava2DToMatlab (javaArray) 
    numrows = max (size (javaArray)); 
    numcols = max (size (javaArray(1,:))); 
    rv (numrows, numcols) = 1; % preallocating the matrix to optimize 
    for i = 1:numrows 
     for j = 1:numcols 
      if (javaArray(i,j) == 1) 
       rv (i,j) = double (javaArray(i,j)); 
      end 
     end 
    end 
end % end of function convertJava2DtoMatlab        
Cuestiones relacionadas