繁体   English   中英

从Java类型转回MATLAB类型

[英]Moving from Java types back to MATLAB types

我在我的MATLAB工作区中有一个Java数组(下例中的my_array ),我想将其转换回MATLAB数组。

whos my_array

  Name       Size            Class                                    

  my_array   20000x1            java.lang.Object[]

我无法在外部接口文档中找到如何将Java类型转换回MATLAB类型。 我发现的唯一的事情就是这个 (关于MATLAB单元的文档),它说我可以用MATLAB单元来完成这个任务。

使用MATLAB cells似乎有点矫枉过正,特别是当我处理相同类型的数千个元素时(在本例中为double )。 有没有其他方法将Java对象移回MATLAB的本机类型?

例:

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

当我处理相同类型的数千个元素时(在这种情况下,双倍)

你是否掌控了有问题的Java代码? 如果是这种情况,返回double[]而不是Double[]数组或Object[]数组 - MATLAB将自动将double[]数组转换为double[]精度的MATLAB向量。

请注意,您可以使用matlab中的double函数将java neumeric类型转换为matlab内部。

参考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                               

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM