2017-01-15 5 views
1

私は5つの非常に大きなマトリックスを含む1×5セルを持っています。私の記憶の大半を占めるセル全体を読み込むのではなく、私が望む1つの行列だけをどのように読み込むことができますか?Matlabの.matファイルからセルのエントリを1つだけ読み込む方法は?

ので

M2 = load('Cellmat{2}'); 

のようなものは、以前save('Cellmat','Cellmat');によってディレクトリに保存されているセルCellmat、第二のマトリックスであることをM2を定義する必要があります。

答えて

2

これを達成する唯一の方法は、matfileを使用してファイルを読み取ることです。これは、parts of variablesのみを読み取ることができるためです。また、ファイルがintitially

matfileのみバージョン7.3形式のMAT-ファイルのための効率的な部分のロードと保存をサポートしてい7.3形式で保存されたことを前提としています。バージョン7(現在のデフォルト)または以前のMATファイルで変数にインデックスを付けると、MATLAB®は変数の内容全体を警告し、一時的に読み込みます。

最初にデータを保存するには、-7.3フラグを指定します。

save('Cellmat.mat', 'Cellmat', '-v7.3') 

次に、あなたがCellmatから必要だけ要素をロードするためにmatfileを使用することができます。 ()インデックス作成(M2になるようにインデックスを作成できるセルが生成されます)を使用してアクセスしなければならないことに注意してください。Cellmatにインデックスを付けるときは、行とカラムの添字を指定する必要があります。

mat = matfile('Cellmat.mat'); 

% A little workaround because you can't use {} indexing on matfile objects 
tmp = mat.Cellmat(1, 2); 
M2 = tmp{1}; 

「古い学校」の代替は感謝を別々の変数にあなたのセル配列を破り、/負荷にちょうどそれらの変数

thing = Cellmat{1}; 
other_thing = Cellmat{2}; 

save('Cellmat.mat', 'thing', 'other_thing'); 

% Only load in one variable 
M2 = load('Cellmat.mat', 'other_thing'); 
+0

を保存するだろう、それは働きました! Matlabにはこれを行うための標準的な方法はありません。 –

+0

@Lovsovsこれは標準的な方法です。 'matfile'の前に私は最後の編集で示したように複数の変数でそれをやらなければならなかった – Suever

+0

私はそれが最善の方法であると確信しています、それは私が意味していたものではありません。それを行う「ハッキー」な方法(v7.3とtmpとそのすべてのジャズ)、すなわちIMO Matlabは同じ目的を達成するより直感的な方法を持つべきです。再度、感謝します。 :) –

関連する問題