8

関連コード:

function result = loadStructFromFile(fileName, environmentName) 
    result = load(fileName, environmentName);


bigMatrix = loadStructFromFile('values.mat','bigMatrix'); 

しかし、ワークスペースを見ると、「bigMatrix」が1x1構造体として表示されます。ただし、構造体をクリックすると、実際のデータ(この場合は998x294マトリックス)になります。

4

4 に答える 4

10

LOADのドキュメントに示されているように、出力引数を指定して呼び出すと、結果が構造体に返されます。出力引数を使用して呼び出さない場合、変数は保存された名前でローカルワークスペースに作成されます。

関数loadStructFromFileの場合、保存された変数名に異なる名前を付けることができる場合(私は推測しenvironmentNameます)、次のように記述して変数を返すことができます。

function result = loadStructFromFile(fileName, environmentName) 
    tmp = load(fileName, environmentName);
    result = tmp.(environmentName); 
于 2011-01-17T22:25:53.850 に答える
3

単一の変数名を指定した場合でも、LOADはそれを構造体に出力します。あなたの場合、あなたが持っている1つのオプションは、関数STRUCT2CELLを使用してLOADからの出力をセル配列に変換し、次に変数出力引数リストを使用してこの結果を返すことです。

function varargout = loadStructFromFile(fileName,environmentName)
  varargout = struct2cell(load(fileName,environmentName));
end

VARARGOUTを使用environmentNameすると、.MATファイル内の複数の変数に一致する場合、関数からそれらすべてを返すことができるという追加の利点があります。たとえば、.MATファイルに3つの変数、、、N1およびN2があり、がN3である場合、複数の出力を使用して関数を呼び出すことにより、それらすべてを取得できます。environmentNameN*

[N1,N2,N3] = loadStructFromFile('values.mat','N*');
于 2011-01-17T22:26:12.480 に答える
2

これは古い投稿ですが、一部の人に役立つ場合は次のようになります。

構造をロードし、出力構造のサブフィールドを直接割り当てたい場合はstructfun、次のコマンド を使用できます。

bigMatrixOUT = structfun(@(x) x,load('values.mat','bigMatrix'))

bigMatrixOUT のフィールドが直接含まれますが、含まれbigMatrixませんbigMatrixOUT.bigMatrix

于 2018-02-01T08:15:50.197 に答える
1

ドット表記を使用して既知のフィールドにアクセスして、すべてが1行のコードで実行されるようにすることもできます。

bigMatrix = load('values.mat','bigMatrix').bigMatrix; 

また

bigMatrix = load('values.mat','bigMatrix').('bigMatrix'); 
于 2020-10-07T21:14:23.527 に答える