Файлы данных MATLAB в скомпилированных приложениях

Явное включение файлов данных MATLAB с использованием функции% # Pragma

Компилятор исключает MATLAB® файлы данных (MAT-файлы) из анализа зависимостей по умолчанию. Смотрите анализ зависимостей с использованием MATLAB Compiler.

Если вы хотите, чтобы компилятор явно проверял данные в MAT файлы, необходимо задать %#function прагма при записи кода MATLAB.

Например, если вы создаете решение с Deep Learning Toolbox™, необходимо использовать %#function прагма в вашем коде, чтобы включить зависимость от gmdistribution класс, для образца.

Загрузка и сохранение функций

Если ваше развернутое приложение использует файлы данных MATLAB (MAT-файлы), полезно кодировать LOAD и SAVE функции для манипулирования данными и хранения их для последующей обработки.

  • Использование isdeployed чтобы определить, работает ли ваш код в рабочем пространстве MATLAB или вне него.

  • Укажите файл данных при помощи WHICH (чтобы найти его полное имя пути) задайте его относительно местоположения ctfroot.

  • Все MAT-файлы остаются без изменений после mcc выполняется. Эти файлы не шифруются при записи в развертываемый архив.

Дополнительные сведения о развертываемых архивах см. в разделе Развертываемый архив.

См. ctfroot страница с описанием для получения дополнительной информации о ctfroot.

Используйте следующий пример в качестве шаблона для манипулирования данными MATLAB внутри и снаружи MATLAB.

Использование функций загрузки/сохранения для обработки данных MATLAB для развернутых приложений

Следующий пример задает три файла данных MATLAB:

  • user_data.mat

  • userdata\extra_data.mat

  • ..\externdata\extern_data.mat

  1. Переход к matlab_root\ extern\примеры\компилятор\Data _ Handling.

  2. Скомпилируйте ex_loadsave.m со следующими mcc команда:

    mcc -mv ex_loadsave.m -a 'user_data.mat' -a
         '.\userdata\extra_data.mat' -a 
         '..\externdata\extern_data.mat'
    

ex_loadsave.m

function ex_loadsave
% This example shows how to work with the 
% "load/save" functions on data files in
% deployed mode. There are three source data files
% in this example.
%    user_data.mat 
%    userdata\extra_data.mat 
%    ..\externdata\extern_data.mat
%
% Compile this example with the mcc command: 
%     mcc -m ex_loadsave.m -a 'user_data.mat' -a
%     '.\userdata\extra_data.mat' 
%         -a '..\externdata\extern_data.mat'
% All the folders under the current main MATLAB file directory will 
%    be included as
% relative path to ctfroot; All other folders will have the 
%    folder
% structure included in the deployable archive file from root of the 
%     disk drive.
%
% If a data file is outside of the main MATLAB file path,
%     the absolute path will be
% included in deployable archive and extracted under ctfroot. For example: 
%   Data file  
%     "c:\$matlabroot\examples\externdata\extern_data.mat"
%     will be added into deployable archive and extracted to
%  "$ctfroot\$matlabroot\examples\externdata\extern_data.mat".
% 
% All mat/data files are unchanged after mcc runs. There is
% no encryption on these user included data files. They are 
% included in the deployable archive.
%
% The target data file is:
%   .\output\saved_data.mat
%   When writing the file to local disk, do not save any files 
%    under ctfroot since it may be refreshed and deleted  
%   when the application isnext started.

%==== load data file =============================
if isdeployed
    % In deployed mode, all file under CTFRoot in the path are loaded
    % by full path name or relative to $ctfroot.
    % LOADFILENAME1=which(fullfile(ctfroot,mfilename,'user_data.mat'));    
    % LOADFILENAME2=which(fullfile(ctfroot,'userdata','extra_data.mat'));
    LOADFILENAME1=which(fullfile('user_data.mat'));
    LOADFILENAME2=which(fullfile('extra_data.mat'));
    % For external data file, full path will be added into deployable archive;
    % you don't need specify the full path to find the file.
    LOADFILENAME3=which(fullfile('extern_data.mat'));
else
    %running the code in MATLAB
    LOADFILENAME1=fullfile(matlabroot,'extern','examples','compiler',
                                     'Data_Handling','user_data.mat');
    LOADFILENAME2=fullfile(matlabroot,'extern','examples','compiler',
                              'Data_Handling','userdata','extra_data.mat');
    LOADFILENAME3=fullfile(matlabroot,'extern','examples','compiler',
                                      'externdata','extern_data.mat');
end

% Load the data file from current working directory
disp(['Load A from : ',LOADFILENAME1]);
load(LOADFILENAME1,'data1');
disp('A= ');
disp(data1);

% Load the data file from sub directory
disp(['Load B from : ',LOADFILENAME2]);
load(LOADFILENAME2,'data2');
disp('B= ');
disp(data2);

% Load extern data outside of current working directory
disp(['Load extern data from : ',LOADFILENAME3]);
load(LOADFILENAME3);
disp('ext_data= ');
disp(ext_data);

%==== multiple the data matrix by 2 ==============
result = data1*data2;
disp('A * B = ');
disp(result);

%==== save  the new data to a new file ===========
SAVEPATH=strcat(pwd,filesep,'output');
if ( ~isdir(SAVEPATH))
    mkdir(SAVEPATH);
end
SAVEFILENAME=strcat(SAVEPATH,filesep,'saved_data.mat');
disp(['Save the A * B result to : ',SAVEFILENAME]);
save(SAVEFILENAME, 'result');