Amelio Vazquez-Reina
Amelio Vazquez-Reina

Reputation: 96284

Moving from Java types back to MATLAB types

I have a Java array (my_array in the example below) in my MATLAB workspace that I would like to convert back to a MATLAB array.

whos my_array

  Name       Size            Class                                    

  my_array   20000x1            java.lang.Object[]

I could not find how to convert Java types back to MATLAB types in the External Interfaces documentation. The only thing I found is this (the documentation about MATLAB cells) which says that I can use MATLAB cells to do this task.

Using MATLAB cells seems an overkill, specially when I am handling thousands of elements of the same type (in this case, double). Is there any other way of moving Java objects back into MATLAB's native types?

Upvotes: 5

Views: 2851

Answers (3)

albionsq
albionsq

Reputation: 11

note that you can use the double function in matlab to convert java neumeric types to matlab internal.

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                               

Upvotes: 1

Jason S
Jason S

Reputation: 189686

when I am handling thousands of elements of the same type (in this case, double)

Are you in control of the Java code in question? If this is the case, return a double[] rather than a Double[] array or an Object[] array -- MATLAB will automatically convert a double[] array to a MATLAB vector of doubles.

Upvotes: 2

Amro
Amro

Reputation: 124563

Example:

%# 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      

Upvotes: 6

Related Questions