2011-01-17 6 views
7

関連するコード:Matlab:.matファイルを読み込んでいますが、なぜ構造体ですか?私はちょうどメモリにロードされたvarsを格納することができますか?

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


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

しかし、私はワークスペースに見たとき、それは1x1の構造体としての「bigMatrix」を示しています。しかし、構造体をクリックすると、実際のデータ(この場合は998x294の行列)になります。

答えて

7

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

保存された変数名が異なる名前を(私はenvironmentNameを想定)を持つことができれば、あなたはただ、LOAD意志を単一の変数名を指定した場合でも

function result = loadStructFromFile(fileName, environmentName) 
    tmp = load(fileName, environmentName); 
    result = tmp.(environmentName); 
3

を書き込むことによって、変数を返すことができますそれを構造体に出力します。あなたのケースでは、あなたが持っている一つの選択肢は、variable output argument listを使用して、この結果を返し、その後、セル配列にLOADからの出力を変換する機能STRUCT2CELLを使用することです:

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

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

[N1,N2,N3] = loadStructFromFile('values.mat','N*'); 
0

それは古い記事ですが、あなたが構造をロードすると

、そしてあなたが直接出力構造でのサブフィールドを割り当てるには、structfunし、次のコマンドを使用することができます:それはいくつかの人々のために有用であることができれば

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

bigMatrixOUTは、bigMatrixのフィールドを直接含み、bigMatrixOUT.bigMatrix

ではありません
関連する問題