Matlab对象占用.mat文件中的大空间

pas*_*y51 5 matlab

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

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

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

            CT_COL: 2
            p: 5
            d: 10
            n: 37
            N: 20
          idx: [20x1 double]
           Am: [4-D double]
            X: [4-D double]
            y: [37x1 double]
        KGram: [20x20 double]
       reWave: []
          rpw: 2
         grps: [1x37 double]
        exIDX: [1 4 5 6 13]
          nCV: 100
        prIDX: [100x6 double]
        trIDX: [100x26 double]
            U: [5x100 double]
            V: [10x100 double]
            B: [20x100 double]
         Yhat: [37x100 double]
          Lam: [100x1 double]
    peakRatio: [37x1 double]

Am和X都是20x10x5x37阵列(双倍)

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

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

Name      Size             Bytes   Class        Attributes

ob        1x1              680512  uvXbModel   

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

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

pas*_*y51 5

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

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

  • 同样,不要挑剔,但这些是"匿名",而不是"内联"功能,并且区别与此主题有关:匿名函数将捕获工作空间的副本,而不是内联函数.但是+1无论如何. (2认同)