2017-01-28 79 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文件執行。