2011-02-02 46 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