Переход от типов Java обратно к типам MATLAB - PullRequest
5 голосов
/ 02 февраля 2011

В моем рабочем пространстве 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?

Ответы [ 3 ]

6 голосов
/ 02 февраля 2011

Пример:

%# 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      
2 голосов
/ 02 февраля 2011

когда я работаю с тысячами элементов одного типа (в данном случае с двойным)

Контролируете ли вы Java-код, о котором идет речь?Если это так, верните double[] вместо массива Double[] или массива Object[] - MATLAB автоматически преобразует массив double[] в вектор MATLAB с двойным числом.

1 голос
/ 02 июня 2011

обратите внимание, что вы можете использовать двойную функцию в 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                               
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...