2012-01-16 4 views
4

У меня очень большая структура данных в некотором коде Matlab, который находится в виде ячеек массивов. Мы хотим разработать C-код для работы над этими данными, но мне нужно каким-то образом сохранить переменную Matlab (которую мы сгенерируем в Matlab) и открыть ее в программе C/C++. Что является самым простым способом свести две программы, чтобы я мог передавать данные?Перенос переменных Matlab в C

ответ

1

Если вы только перемещаете данные с MATLAB на C, то проще всего записать его в двоичный файл, а затем прочитать из файла в C. Это, конечно, оставляет код C полностью независимым от MATLAB.

Это не должно быть бесполезным, если ваша структура данных представляет собой только массив ячеек регулярных массивов, например.

a{1} = zeros(1,5); 
a{2} = zeros(1,4); 

Вы можете просто написать заголовок для каждой ячейки, а затем данные в файл. В приведенном выше случае, это было бы:

[length{1} data{1} length{2} data{2}] 

В приведенном выше случае:

5 0 0 0 0 0 4 0 0 0 0 

Если массивы 2D, вы можете расширить это в письменной форме: строка, столбец, то данные в строке - основной порядок для каждой ячейки.

Это может быть не совсем удобно, но должно быть достаточно простым. Вы также можете сохранить его как файл .mat и прочитать это, но я бы не рекомендую это. Гораздо проще поставить его в двоичном формате в MATLAB.

Если вам нужно переместить данные чаще, чем удобно для файла, есть и другие варианты, но все, о чем я могу думать, связано каким-то образом с MATLAB.

0

Вы должны использовать MEX файлы:

http://www.mathworks.fr/support/tech-notes/1600/1605.html

+0

Код C должен быть независимым от Matlab. Мы используем Matlab для генерации входных значений. Даже что-то такое же простое, как печать их в файл и чтение их с помощью кода C, будет вариантом, но поскольку они являются большими ячейками матриц, это уродливое решение, и мне было интересно, есть ли лучший метод. – ras2124

0

Если эти два процесса необходимо соединить в течение их жизненного цикла, у вас есть много вариантов:

  • Compile Matlab DLL.
  • Использование двигателя Matlab.
  • Compile MEX файл (как @Oli упоминалось ранее)

Если связь отсутствует (После того, как Matlab закрывается, C++ начинает читать), то вы должны использовать файловую систему. Попробуйте отформатировать его в XML, это хорошо зарекомендовавший себя стандарт.

Смежные вопросы