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

标签 matlab

我有一个对象来 self 用 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 数组( double )

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

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

Name      Size             Bytes   Class        Attributes

ob        1x1              680512  uvXbModel   

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

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

最佳答案

这是我在代码中发现的问题: 问题是我存储在两个 protected 属性中的两个 inline 匿名函数句柄。只有这两个,@(X) median(abs(X),2)@median

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

关于Matlab 对象在 .mat 文件中占用较大空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205727/

相关文章:

matlab - “which”命令在 MATLAB 中不起作用

matlab - 两个输入之间的不规则形状比较

matlab - 索引必须出现在索引表达式的最后

MATLAB 支持向量机 : Using the same dataset for training and testing gives different results

matlab - 如何在二进制图像中找到该行?

matlab - 如何自动显示图例,使其接触 Matlab (R 2019b) 图中角的边界?

matlab - 提取边界内的图像区域

MATLAB:我可以以某种方式使用函数作为第一类对象吗?

matlab - 在 matlab 中使用 ismember 或 intersect

matlab - 更改插值 RGB 图像的图像长宽比。正方形到长方形