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

Явным образом Включая Файлы данных MATLAB Используя % #function Прагма

Компилятор исключает 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\examples\compiler\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');