开发者

Moving from Java types back to MATLAB types

开发者 https://www.devze.com 2023-02-08 04:42 出处:网络
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.

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?


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      


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.


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                               
0

精彩评论

暂无评论...
验证码 换一张
取 消