5

我有一个我在 Matlab 中编写的类的对象。当我使用“whos”命令来确定它的大小时,它大约是 720,000 字节。当我将它保存在 .mat 文件中时,大约需要 75MB。到底是怎么回事?

有没有一种在 Matlab 中保存和加载对象的有效方法?

编辑:这是属性及其大小的列表

            CT_COL:2
            人:5
            d: 10
            n: 37
            数量:20
          idx:[20x1 双]
           上午:[4-D双]
            X:[4-D双]
            y:[37x1 双]
        公斤:[20x20 双倍]
       回波:[]
          转速:2
         grps:[1x37 双]
        exIDX:[1 4 5 6 13]
          nCV:100
        prIDX:[100x6 双倍]
        trIDX:[100x26 双倍]
            U:[5x100 双]
            五:[10x100双]
            B:[20x100 双倍]
         Yhat:[37x100 双倍]
          林:[100x1 双]
    峰值比率:[37x1 双倍]

Am 和 X 都是 20x10x5x37 数组(双)

顺便说一句,属性“reWave”用于保存另一个对象的方法的句柄。我认为这可能不是一个好主意(并且可能导致这种情况),所以我从类定义中删除了任何提及它的内容。但它似乎以某种方式出现在属性集中。(即使在我发布了“明确的课程”之后。)

EDIT2:我正在使用命令 save('uvXbMod1.mat','ob') 来保存对象。令人费解的是:当我使用命令 whos -file uvXbMod1.mat 查看文件中保存的内容时,它显示

名称大小字节类属性

ob 1x1 680512 uvXbModel   

(这是另一个例子,不是上面提到的那个。) .mat 文件中还有什么使它变得那么大?

EDIT3:好的......问题似乎是我存储在两个受保护属性中的两个内联函数句柄。就这两个, @(X) median(abs(X),2) @median 。句柄本身只有几个字节的大小,我假设由于它们是内联函数,它们应该与它们的单行定义一起存储为文本 (?)。但显然这不会发生,它会导致大量其他东西被存储(事后这似乎并不奇怪......)

4

1 回答 1

5

这是我在代码中发现的问题:问题是我存储在两个受保护属性中的两个内联匿名函数句柄。就这两个,@(X) median(abs(X),2)@median

句柄本身只有几个字节大小,我假设由于它们是 内联匿名函数,它们应该与它们的单行定义一起存储为文本。但显然这不会发生,它会导致大量其他东西被存储起来。

于 2013-04-25T18:13:55.013 回答