1

フォルダーBとCを含むフォルダーAがあります

A--B
   C--|
     --|mat file  

フォルダー レベルでは、スタートアップ スクリプトがあり、このスクリプトから、C1 フォルダーで使用可能な data.mat ファイルで使用可能なデータをロードします。

だから私のスクリプト A_script.m から、私はやった:

load('C/C1/data.mat');

スクリプトファイルの内容:

function data_startup
%WHC_PROJECT_STARTUP
bdclose all;
load('B\C\data_v2.0.mat');

しかし、これは何もせず、データはロードされず、エラーは発生しません! 誰かが私を助けることができますか?

ありがとう

4

3 に答える 3

3

その理由は、関数が独自の変数スコープを導入するためです。1 .mat ファイルの変数は関数のスコープに読み込まれますが、グローバル スコープには読み込まれません。


1. http://www.mathworks.co.uk/help/techdoc/matlab_prog/f0-38052.html#f0-38463も参照してください。

于 2012-02-23T15:57:19.077 に答える
1

質問から私が理解しているのは、サブフォルダーの .mat-file にデータが保存されていて、それを何らかの初期化に使用したいということです。後でベース ワークスペースからそれらを使用することが予想される場合、1 つの可能性は、関数をスクリプトに変更することです。

%WHC_PROJECT_STARTUP
bdclose all;
load(fullfile('B', 'C', 'data_v2.0.mat'));

ここで関数の使用をお勧めします

fullfile('B', 'C', 'data_v2.0.mat')

これにより、プラットフォームに依存しないコードが作成されるためです (Linux は「/」、Windows は「\」を使用します)。.mat ファイルの内容をベース ワークスペースにロードする場合は、上記のコードをスクリプトとして保存して実行します。

関数でファイルを読み取り、後でベース ワークスペースで使用することを主張する場合は、次のコードを見てください。

function data_startup()
%WHC_PROJECT_STARTUP
bdclose all;
temp_data=load(fullfile('B', 'C', 'data_v2.0.mat')); % will be loaded as structure
file_variables=fieldnames(temp_data);% get the field names as cell array
for ii=1:length(file_variables)
   % file_variables{ii} - string of the field name
   % temp_data.(file_variables{ii}) - dynamic field reference
   assignin('base', file_variables{ii}, temp_data.(file_variables{ii}));
end

コードは動作するはずです。今は家にいるのでテストできません。申し訳ありません。

あるワークスペースから別のワークスペースに変数を割り当てると、コードのサポートと拡張に問題が発生する可能性があります (突然変数が作成され、それらがどこから来たのかわかりません)。構造体のフィールドに動的にアクセスする方法の例をいくつか次に示します。

于 2012-02-23T20:13:36.940 に答える
0

このような出力を持つように関数を変更すると、親(呼び出し元)関数でこの出力変数のデータを使用できます

function output=data_startup
%WHC_PROJECT_STARTUP
bdclose all;
output=load('B\C\data_v2.0.mat');
于 2012-02-23T18:05:04.240 に答える