MatFile对象仅支持'()'索引

时间:2017-01-28 15:28:01

标签: matlab indexing

以下错误消息是什么意思?

  

MatFile对象仅支持'()'索引

这是对所有.mat文件版本的限制吗?

1 个答案:

答案 0 :(得分:2)

首先,此错误确实特定于v7.3 .mat文件,因为这些文件是必需的,以便matfile只访问部分数据而不将整个变量加载到内存中

  

高效的部分加载和保存需要7.3版MAT文件。要创建Version 7.3 MAT文件,请使用'-v7.3'选项

调用save函数

如果你有一个非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.A{1}
  

MatFile对象仅支持'()'索引

但是,如果我们使用()索引(作为错误消息状态),则 ()索引到单元格数组会产生 new cell array所以你需要像这样对待它。请参阅the documentation中有关索引到单元格数组的更多信息。

first_value = m.A(1);

iscell(first_value)
%   1

size(first_value)
%   1   1

actual_value = m.A{1};

原因可能与复杂数据类型如何存储在v7.3 .mat文件中有关(this post中的更多信息)。