0

ハードディスクに保存されたMatlabに(行列の)構造体があります。現在load、これらのファイルを関数内にロードするために使用しています。はるかに高速な別の方法でこれを行う提案はありますか?

(はい、構造体を変数として関数に渡すことはできますが、メモリの問題により不可能です!)。ありがとう!これは大きな助けになるでしょう!

A = struct('local', randn(200000,14), 'usd', randn(200000,14), ...
          'ttm', randn(180000,14), 'avg', randn(190000,14), ...
          'ttm1yr', randn(190000,14), 'avg1yr', randn(190000,14)) ;
save('A.mat', 'A') ;                     clear all;clc

tic, load A.mat, A=A.local; toc  %--> Takes 1.05 seconds
4

2 に答える 2

1

保存したファイルの特定のチャンクのみに関心があるようです。保存されたデータの形式を変更して、個々の変数を

S = load(filename, variables)

の形load。これにより、不要なデータをすべてディスクからメモリにコピーしてすぐに解放することを避けることができるため、読み込みが大幅に高速化されます。

データがすでに構造体形式になっている場合は、次の形式を使用できますsave(オンライン ドキュメントから)。

save(filename, '-struct', structName, fieldNames) は、指定されたスカラー構造体のフィールドを個々の変数としてファイルに保存します。オプションの fieldNames を含めると、save 関数は構造体の指定されたフィールドのみを保存します。save の同じ呼び出しで、変数と「-struct」キーワードを指定することはできません。

于 2012-03-03T23:44:42.633 に答える
1

R2011a 以降、matfileオブジェクトを介して load を使用せずに Mat ファイルの内容にアクセスできます。 help matfile詳細については。

本当の利点は、これにより、配列全体をロードまたは保存することなく、大きな配列の一部の読み取り/書き込みが可能になることです。

構造体のフィールドはこの方法では索引付けできないため、これは現在の構造体では限定的に使用されます。ただし、アプリケーションの残りの部分がどのように見えるかに応じて、比較的小さなリファクタリングでこれらの機能を利用できます。

于 2012-03-04T00:25:58.177 に答える