5

Matlab で作成したクラスのオブジェクトがあります。「whos」コマンドを使用してそのサイズを確認すると、およそ 720,000 バイトです。.mat ファイルに保存すると、約 75MB かかります。何が起こっている?

Matlab でオブジェクトを保存して読み込む効率的な方法はありますか?

編集:これはプロパティとそのサイズのリストです

            CT_COL: 2
            p:5
            日: 10
            n:37
            N: 20
          idx: [20x1 ダブル]
           アム: [4-D ダブル]
            X: [4次元ダブル]
            y: [37x1 ダブル]
        KGram: [20x20 ダブル]
       リウェーブ: []
          RPW: 2
         grps: [1x37 ダブル]
        exIDX: [1 4 5 6 13]
          nCV: 100
        prIDX: [100x6 ダブル]
        triIDX: [100x26 ダブル]
            U: [5x100 ダブル]
            V: [10x100 ダブル]
            B: [20x100 ダブル]
         Yhat: [37x100 ダブル]
          ラム: [100x1 ダブル]
    peakRatio: [37x1 double]

Am と X は両方とも 20x10x5x37 の配列 (double の)

ちなみに、プロパティ「reWave」は、別のオブジェクトのメソッドのハンドルを保持するために使用されていました。私はそれは良い考えではないかもしれない(そしてこれを引き起こしているかもしれない)と思ったので、クラス定義からそれについての言及を削除しました. しかし、どういうわけかプロパティのセットに表示されるようです。(「クリア授業」を出した後も。)

EDIT2: save('uvXbMod1.mat','ob') オブジェクトだけを保存するコマンドを使用しています。不可解な点は次のとおりです。コマンドを使用し whos -file uvXbMod1.mat てファイル内に保存されているものを確認すると、次のように表示されます

名前 サイズ バイト クラス属性

ob 1x1 680512 uvXbモデル   

(これは別の例であり、上記の例とは異なります。) .mat ファイルには他に何が含まれているので、これほど大きくなっているでしょうか?

EDIT3: OK... 問題は、2 つの保護されたプロパティに格納された 2 つのインライン関数ハンドルにあるようです。この 2 つだけ、 @(X) median(abs(X),2)および @median . ハンドル自体のサイズはわずか数バイトで、インライン関数であるため、1 行の定義と共にテキスト (?) として格納する必要があると想定しました。しかし、明らかにそれは起こらず、大量の他のものが一緒に保存されます (事後ではそれほど奇妙に思えません...)

4

1 に答える 1

5

私のコードで見つけた問題は次のとおりです。問題は、2 つの保護されたプロパティに格納された 2つのインライン匿名関数ハンドルでした。この 2 つだけで、@(X) median(abs(X),2)@median.

ハンドル自体のサイズはわずか数バイトで、これらは インラインの無名関数であるため、1 行の定義と共にテキストとして格納する必要があると想定しました。しかし、どうやらそれは起こらず、大量の他のものが一緒に保存されます。

于 2013-04-25T18:13:55.013 に答える