作成したアプリケーションのデータが変更されない
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
アプリケーションの作成についてよくわかりません。
ある学習データ(data.csvとして同じフォルダ内に配置)を基に新しいデータの予測をするソースコードをMATLAB上で作成しています。
このソースコードをアプリケーションコンパイラでアプリケーションにし、動作させた場合に、data.csvを変更しても、元のdata.csvに従って計算する場合があります。アプリケーションの中にdata.csvが残っていて、変更しても元のdata.csvを使っているとしか思えないのですが、そういうことは起こりうるのでしょうか。
ちなみに、MATLAB上で動作させると、フォルダ内のdata.csvを変更すると、変更されたdata.csvで計算されます。
コンパイル時に、コンパイルの仕方でアプリケーション内部にデータが残ったりすることがあるのでしょうか。やり方がまずいのでしょうか。
MATLAB上で計算させて確認後、ワークスペースのクリア後にコンパイルしてその後データ変更を行っても元のデータが残っているようです。
漠然としておりますが、ソースが大きすぎて開示するのが困難なので、口頭での説明にて失礼いたします。
0 Kommentare
Antworten (1)
Kojiro Saito
am 9 Sep. 2020
実行時にMATLAB Runtimeのキャッシュフォルダにdata.csvが置かれるのですが、それが残ってしまって、手元のデータを変更しても反映されていないのかもしれません。
MATLAB Runtimeのキャッシュフォルダは
Windowsの場合、
C:\Users\USERNAME\AppData\Local\Temp\USERNAME\mcrCacheX.X\FUNCTIONNAME\FUNCTIONNAME
Linuxの場合、
/home/USERNAME/.mcrCacheX.X/FUNCTIONNAME/FUNCTIONNAME
になります。
例えば、R2019bの場合、MATALB Runtimeのバージョンは9.7なので、addmatrix.exeを実行すると
C:\Users\USERNAME\AppData\Local\Temp\USERNAME\mcrCache9.7\addmat0\addmatrix
のようにキャッシュフォルダが作られます。
この中にdata.csvが置かれていて、手元のファイルを変更しても、変更が反映されないことがあります。
対処方法としては、一旦data.csvをデスクトップに移動するなどしてMATLABのパス上にない場所に移動させ、アプリケーションコンパイラでコンパイルし、コンパイルが終わったらexeと同じフォルダにdata.csvを置く、などの方法があります。
もしMATLABのバージョンR2020aを使えるなら、ファイルをパッケージに含まないようにするオプションが出ましたので、
mファイルに %#exclude data.csv というプラグマを付けることでコンパイル時にdata.csvが除外されます。
7 Kommentare
Kojiro Saito
am 17 Sep. 2020
Bearbeitet: Kojiro Saito
am 17 Sep. 2020
こちらを読んで原因がわかりました。
データ ファイルの依存関係
上記の実行可能コンテンツに加え、MATLAB Compiler は、次の任意の関数を呼び出して、MATLAB 関数がアクセスするファイルの検出と自動インクルードを行うことができます。audioinfo、audioread、csvread、daqread、dlmread、fileread、fopen、imfinfo、importdata、imread、load、matfile、mmfileinfo、open、readtable、type、VideoReader、xlsfinfo、xlsread、xmlread、xslt。
コンパイラ アプリを使用している場合、これらのデータ ファイルはアプリの [アプリケーションの実行に必要なファイル] 領域に自動的に追加されます。
dlmreadでは、csvやtxt、matなどのファイルが自動的に「アプリケーションの実行に必要なファイル」に取り込まれます。
dlmreadの例
function testDlmRead
m = dlmread('mydata.txt');
disp(m)
end
アプリケーションコンパイルでコンパイルした時
ただ、readmatrixは上記のドキュメントの関数一覧に無いので、入力ファイルが「アプリケーションの実行に必要なファイル」に取り込まれません。
readmatrixの例
function testReadMatrix
m = readmatrix('mydata.txt');
disp(m)
end
アプリケーションコンパイルでコンパイルした時
アプリケーションの実行に必要なファイルに何も含まれません。
ですので、入力ファイルを変更した場合、readmatrixではコンパイルしたアプリケーションが新しいファイルを読み込みますが、dlmreadではコンパイルしたアプリケーションに入力ファイルが含まれてしまっているので、新しいファイルが反映されない、という挙動の違いになります。
Siehe auch
Kategorien
Mehr zu MATLAB Compiler finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!