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