2011-02-02 66 views
5

我在我的MATLAB工作区中有一个Java数组(在下面的示例中为my_array),我想将其转换回MATLAB数组。从Java类型移回到MATLAB类型

whos my_array 

    Name  Size   Class          

    my_array 20000x1   java.lang.Object[] 

我找不到在External Interfaces文档中如何将Java类型转换回MATLAB类型。我发现的唯一的东西是this(关于MATLAB单元的文档),它说我可以使用MATLAB单元来完成这个任务。

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

回答

6

例子:

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

第二个(`cell2mat(细胞(...))`)是较好的,因为它也适用于2D阵列。 – luator 2017-01-24 11:04:49

2

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

你是在有问题的Java代码的控制?如果是这种情况,请返回double[]而不是Double[]阵列或Object[]阵列 - MATLAB会自动将double[]阵列转换为双精度的MATLAB向量。

+0

如何在matlab中创建一个`double []`? – 2014-05-30 16:41:49

1

请注意,您可以使用matlab中的双重功能将Java neumeric类型转换为matlab内部。

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