作成したアプリケーションのデータが変更されない
6 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
アプリケーションの作成についてよくわかりません。
ある学習データ(data.csvとして同じフォルダ内に配置)を基に新しいデータの予測をするソースコードをMATLAB上で作成しています。
このソースコードをアプリケーションコンパイラでアプリケーションにし、動作させた場合に、data.csvを変更しても、元のdata.csvに従って計算する場合があります。アプリケーションの中にdata.csvが残っていて、変更しても元のdata.csvを使っているとしか思えないのですが、そういうことは起こりうるのでしょうか。
ちなみに、MATLAB上で動作させると、フォルダ内のdata.csvを変更すると、変更されたdata.csvで計算されます。
コンパイル時に、コンパイルの仕方でアプリケーション内部にデータが残ったりすることがあるのでしょうか。やり方がまずいのでしょうか。
MATLAB上で計算させて確認後、ワークスペースのクリア後にコンパイルしてその後データ変更を行っても元のデータが残っているようです。
漠然としておりますが、ソースが大きすぎて開示するのが困難なので、口頭での説明にて失礼いたします。
0 Commenti
Risposte (1)
Kojiro Saito
il 9 Set 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 Commenti
Kojiro Saito
il 17 Set 2020
Modificato: Kojiro Saito
il 17 Set 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ではコンパイルしたアプリケーションに入力ファイルが含まれてしまっているので、新しいファイルが反映されない、という挙動の違いになります。
Vedere anche
Categorie
Scopri di più su MATLAB Compiler in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!