.mat
複数の変数を含むファイルから特定の変数をロードできます。ただし、MATLAB の変数内から任意のインデックスのセットだけを読み込むことはできないと思います。
とはいえ、特定の行/列のみにアクセスする必要があるタイプの問題である場合は、回避策があるかもしれません。
struct
各列を個別のフィールドとしてマトリックスから作成し、オプションを使用して.mat
ファイルを保存して、各フィールドが個別の変数として保存されるようにすることができます。-struct
そうすれば、あなたはあなたが望むものを引き出すことができます。
dummy=randn(100,200);%# this is a test matrix
[dim1,dim2]=size(dummy);
dummyCell=mat2cell(dummy,dim1,ones(dim2,1));%# create a cell from the matrix
fieldNames=strcat(repmat({'col'},1,dim2),cellfun(@num2str,mat2cell(1:dim2,1,ones(dim2,1)),'UniformOutput',false));%# generate fieldnames for the struct
dummyStruct=cell2struct(dummyCell,fieldNames,2);%# create the struct
save('myDummyFile','-struct','dummyStruct')
マトリックスを構造体に直接変換する方法を知りません。したがって、最初に各列をセルに分割します (順序付けは、列にアクセスする必要があることを示したためです。行が必要な場合は、物事を切り替える必要があります)。これはセルにありdummyCell
ます。構造体に保存するには、フィールド名を生成する必要があります。これは文字列セルにありfieldNames
ます。col1
、などの形式のフィールド名を生成col2
します。必要に応じて、意味のある名前を付けることができます。次に、各セルを対応するフィールド名に割り当てることによりcell
、を に変換します。struct
最後に、-struct
MATLAB に各フィールドを個別の変数として保存するように指示するオプションを使用して、mat ファイルを保存します。これはすべて、プログラムが巨大なマット ファイルを保存しているときに実行する必要があります。アクセスする必要がある場合は、col52
、あなたがする必要があるのはそれだけですload('myDummyFile','col52')
。必要に応じて複数ロードすることもできます。
マトリックス内の任意のインデックスにアクセスする必要がある場合、インデックス要件 (つまり、各行/各列) に順序がある場合、これはうまく機能しますが、これは機能しません。セル/構造体を作成して保存するときに、関連するオーバーヘッドが発生する場合があります。ただし、保存は 1 回だけで、頻繁にアクセスする場合は、これで十分です。
マトリックスが巨大な場合 (500x250000 は、今日の標準ではそれほど大きくありません)、このアプローチではメモリの問題に注意する必要があります。これは、マトリックス全体をセルと構造体に複製しているためです。わかりやすくするために順を追って書いていますがdummy
、構造体についても同様にセルを作成してそれ自体に代入することで重複を減らすことができます。ただし、Matlab は操作後に変数をメモリにコピーしてそれ自体に割り当てる必要があるため、これはコピーの数を 1 つ減らすだけです。