gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:48 24 4
gpt4 key购买 nike

我有一个对象来 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        Attributesob        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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com