【问题标题】:Matlab error saving containers.Map()Matlab错误保存containers.Map()
【发布时间】:2016-06-27 19:09:08
【问题描述】:

我尝试将地图保存为一个非常大的 *.mat 文件。 (大约 4 或 5gigs。我不能确定,因为我永远无法保存文件......)

地图生成者:

[amap, ~] = load_audio(config);

后来被

保存了
save('audioMap', 'amap');

现在生成的文件只有 218 字节但没有出现错误。尝试使用whos('-file', 'audioMap.mat') 读取文件的内容会导致以下错误:

Warning: Unable to read some of the variables due to unknown MAT-file error.

地图的每条记录都是一个包含 6 个值的单元格。现在在 Matlab 工作区中查询地图的大小会得到以下输出:

Name         Size            Bytes  Class             Attributes
amap      2279x1               112  containers.Map

现在显然大小不正确,但我能够遍历地图并且所有数据都存在。当查询一条记录的大小时,它大约为 2.5MB。

我还尝试通过右键单击和另存为来保存工作区中的变量,结果相同。 有人知道为什么 Matlab 无法正确保存此地图吗?

【问题讨论】:

  • 您是否尝试使用-v7.3 flag 保存它。很明显,MATLAB 认为该对象比它小得多,因此它不会发出有关使用此标志的正常警告。
  • 另外,每个地图元素的内部到底是什么?它们是自定义对象吗?
  • 这可能是保存对象所需的序列化问题。 container.Map 是您唯一的面向对象的数据结构吗?如果是这样,请尝试 amap_struct=struct(amap) 并保存生成的结构。没有自动取回对象,但您可以验证加载后是否所有数据都存在(amap_struct.serialisation.values)
  • @Suever 所以一条记录的布局是:双向量,双向量,字符串,字符串,整数,字符串。所以没有自定义对象只是普通的 Matlab 数据类型
  • @LukasHäfliger 这可能值得filing a bug report 使用 The Mathworks。我相信这是对象的基本限制(MATLAB 无法确定它们的真实大小),但这非常糟糕。

标签: matlab save


【解决方案1】:

您正在尝试编写has a maximum variable size of 2^31 bytes=2GB 的 MAT 文件 7.0 版

当您尝试写入大于限制的变量时,保存变量时的预期行为将是receive a warning

警告:变量“varname”无法保存到版本低于 7.3 的 MAT 文件中。要保存此变量,请使用 -v7.3 开关。跳过...

由于某种原因没有发出警告,但是无法写入如此大的对象是预期的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多