Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

コンパイルしたアプリケーションの MATLAB データ ファイル

%#function プラグマを使用した MATLAB データ ファイルの明示的な読み込み

既定では、コンパイラは依存関係の解析で MATLAB® データ ファイル (MAT ファイル) を除外します。MATLAB Compiler を使用した依存関係の解析を参照してください。

コンパイラで MAT ファイル内のデータを明示的に調べる場合、MATLAB コードを記述するときに %#function プラグマを指定する必要があります。

たとえば、Deep Learning Toolbox™ を使用してソリューションを作成する場合、コード内で %#function プラグマを使用して gmdistribution クラスなどへの依存関係を含める必要があります。

読み込み関数と保存関数

デプロイされたアプリケーションが MATLAB データ ファイル (MAT ファイル) を使用している場合は、関数 LOAD および関数 SAVE をコーディングしてデータを操作し、将来処理するために保存すると便利です。

  • isdeployed を使用して、コードが実行されるのは MATLAB ワークスペース内なのか外なのかを決めます。

  • WHICH (絶対パスを検索するため) を使用してデータ ファイルを指定し、ctfroot の位置を基準にして定義します。

  • mcc の実行後、すべての MAT ファイルは変更されません。これらのファイルはデプロイ可能なアーカイブへの書き込み時に暗号化されません。

デプロイ可能なアーカイブの詳細は、配布可能なアーカイブを参照してください。

ctfroot の詳細は、ctfroot のリファレンス ページを参照してください。

MATLAB の内外で MATLAB データを処理するためにテンプレートとして以下の例を使用してください。

関数 LOAD/SAVE を使用して、デプロイされたアプリケーションの MATLAB データを処理

次の例は、3 つの MATLAB データ ファイルを指定します。

  • user_data.mat

  • userdata\extra_data.mat

  • ..\externdata\extern_data.mat

  1. matlab_root\extern\examples\compiler\Data_Handling へ移動します。

  2. 以下の mcc コマンドで、ex_loadsave.m をコンパイルします。

    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');