2011-02-02 2 views
5

MATLAB 배열로 다시 변환하려는 MATLAB 작업 공간에 Java 배열 (아래 예제에서는 my_array)이 있습니다.자바 유형에서 MATLAB 유형으로 이전

whos my_array 

    Name  Size   Class          

    my_array 20000x1   java.lang.Object[] 

외부 인터페이스 설명서에서 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 (셀 (...))는'), 좋습니다. – luator

2

I 동일한 유형의 요소 수천 처리하고 (이 경우 두 번)

있습니까? 이 경우 Double[] 배열 또는 Object[] 배열이 아닌 double[]을 반환하십시오. double[] 배열을 자동으로 double 형 MATLAB 벡터로 변환합니다.

+0

matlab에'double []'을 어떻게 만들 수 있습니까? –

1

참고 matlab에서 double function을 사용하여 Java neumeric 유형을 matlab 내부로 변환 할 수 있습니다. 그것은 또한 2 차원 배열 작동으로

심판 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        
관련 문제