2017-01-28 130 views

回答

2

首先,因为这些需要为了让matfile访问数据的唯一部分,而整个变量加载到内存中

高效的部分负荷这个错误实在是特定于v7.3 .MAT文件并且保存需要Version 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.A{1} 

MatFile对象仅支持“()”的索引

然而,如果我们使用()索引(作为错误消息状态)工作的,()索引到一个单元阵列产生一个新的单元阵列,所以你需要像这样对待它。在the documentation中查看有关索引到单元阵列的更多信息。

first_value = m.A(1); 

iscell(first_value) 
% 1 

size(first_value) 
% 1 1 

actual_value = m.A{1}; 

造成这种情况的原因可能具有与复杂数据类型的存储方式(在this post更多信息)内的v7.3 .MAT文件执行。