MATLAB: получение массива ячеек из MATLAB в Java - PullRequest
1 голос
/ 12 ноября 2009

У меня есть массив, созданный в MATLAB , который содержит ряд объектов типа ячейки, которые содержат массивы двойников. В основном это массив <1xn cell>, а каждая ячейка представляет собой массив значений типа double.

Что я хочу сделать, так это каким-то образом экспортировать их, чтобы затем я мог вставить данные в Java в виде рваного массива массивов типа int. Есть мысли о том, как лучше всего это сделать?

Ответы [ 2 ]

2 голосов
/ 20 ноября 2009

Сложно создать массив примитивов Java в Matlab, потому что Matlab хочет автоматически поместить его обратно в массив Matlab.

Что вы можете сделать, так это создать класс Java, который поможет вам, используя сигнатуры методов для управления автобоксом Matlab. Такой слой-обертка может быть быстрее и удобнее, чем обратный путь при экспорте текста.

package test;

/**
 * Class to help build Java arrays from Matlab.
 */
public class JavaArrayBuilder {
    /**
     * Assign an array into a larger ragged array
     * @param array ragged array you're building
     * @param i index into array
     * @param subarray this gets autoboxed to int[] from Matlab
     */
    public static void assignIntArray(Object[] array, int i, int[] subarray) {
        array[i] = subarray;
    }
}

Тогда вы можете позвонить из Matlab следующим образом.

function ja = build_int_array

mynums = { 1:2, 1:5, 1:7 };
% Create a Java array of arrays
dummy = java.lang.Object();
ja = java.lang.reflect.Array.newInstance(dummy.getClass(), numel(mynums));
for i = 1:numel(mynums)
    test.JavaArrayBuilder.assignIntArray(ja, i-1, mynums{i});
end
% Now you have a Java ragged array, albeit as Object[] instead of int[][]

После этого вам необходимо преобразовать массив Object [] в int [] [] в Java, поскольку Matlab распакует Java int [] [] обратно в массив Matlab. Хранение его как объекта [] в М-коде защищает его.

Вы также можете создать Список или другую Коллекцию, используя аналогичные оболочки. Это может лучше сочетаться с вашим другим Java-кодом, и коллекции не распаковываются в Matlab.

0 голосов
/ 13 ноября 2009

Что ж, я хочу работать с Java, а не с MATLAB, поэтому я адаптировал код из cell2cvs от Sylvain Fiedler и получил его для работы, получая массив ячеек и генерируя txt-файл.

function cell2txt(datName,cellArray)
% Writes cell array content into a *.txt file.
%
% CELL2CSV(datName,cellArray,seperator,excelVersion)
%
% datName      = Name of the file to save. [ i.e. 'text.csv' ]
% cellarray    = Name of the Cell Array where the data is in
%
%         by Sylvain Fiedler, KA, 2004
% updated by Sylvain Fiedler, Metz, 06
% fixed the logical-bug, Kaiserslautern, 06/2008, S.Fiedler

seperator1 = ',';
seperator2 = '\n';

datei = fopen(datName,'w');

for z=1:size(cellArray,1)
    for s=1:size(cellArray,2)

        var = eval(['cellArray{z,s}']);

        if size(var,1) == 0
            var = '';
        end

        if isnumeric(var) == 1
            var = num2str(var);
            %fprintf(datei,seperator1);
        end

        fprintf(datei,var);

        if s ~= size(cellArray,2)
            fprintf(datei,seperator2);

        end
    end
end
fclose(datei);

Дополнительный вопрос здесь

...