我在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
。句柄本身只有几个字节,我假设它们是内联函数,它们应该与它们的单行定义一起存储为文本(?)。但显然这种情况不会发生,它会导致大量其他东西被存储起来(事后看起来并不奇怪......)
答案 0 :(得分:5)
以下是我在代码中发现的问题:
问题是我存储在两个受保护属性中的两个内联匿名函数句柄。只有这两个,@(X) median(abs(X),2)
和@median
。
句柄本身只有几个字节,我认为因为它们是 inline 匿名函数,所以它们应该与它们的单行定义一起存储为文本。但显然这种情况不会发生,并且会导致大量其他事物被存储起来。