MatFile 对象仅支持 '()' 索引
Posted
技术标签:
【中文标题】MatFile 对象仅支持 \'()\' 索引【英文标题】:MatFile objects only support '()' indexingMatFile 对象仅支持 '()' 索引 【发布时间】:2017-06-14 04:03:52 【问题描述】:以下错误信息是什么意思?
MatFile 对象仅支持 '()' 索引
这个限制适用于所有版本的 .mat 文件吗?
【问题讨论】:
【参考方案1】:首先,此错误确实特定于 v7.3
.mat 文件,因为需要这些文件才能允许 matfile
仅访问部分数据而不将整个变量加载到内存中
高效的部分加载和保存需要 7.3 版的 MAT 文件。要创建 7.3 版 MAT 文件,请使用“-v7.3”选项调用保存函数
如果您有一个非v7.3
.mat 文件,那么您需要将整个变量加载到内存中在对其进行索引。
您收到的错误消息是因为仅支持带有圆括号 (()
) 的索引。此外,无法索引到以下类型
我们可以以元胞数组为例来说明这一点
% Create a cell array
A = 1, 2, 3;
% Save the cell array as a v7.3 .mat file so that it supports indexing
save('A.mat', 'A', '-v7.3')
% Create a matfile object
m = matfile('A.mat');
% Try indexing with
first_value = m.A1
MatFile 对象仅支持 '()' 索引
但是,如果我们使用 ()
索引(如错误消息所述),这可行,但是 ()
索引到元胞数组会产生一个新元胞数组所以你需要这样对待它。在the documentation 中查看有关对元胞数组进行索引的更多信息。
first_value = m.A(1);
iscell(first_value)
% 1
size(first_value)
% 1 1
actual_value = m.A1;
造成这种情况的原因可能与复杂数据类型在v7.3
.mat 文件中的存储方式有关(更多信息请参见this post)。
【讨论】:
以上是关于MatFile 对象仅支持 '()' 索引的主要内容,如果未能解决你的问题,请参考以下文章