【问题标题】:MatFile objects only support '()' indexingMatFile 对象仅支持 '()' 索引
【发布时间】:2017-06-14 04:03:52
【问题描述】:

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

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

这个限制适用于所有版本的 .mat 文件吗?

【问题讨论】:

    标签: matlab indexing


    【解决方案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.A{1}
    

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

    但是,如果我们使用 () 索引(如错误消息所述),这可行,但是 () 索引到元胞数组会产生一个元胞数组所以你需要这样对待它。在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)。

    【讨论】:

      猜你喜欢
      • 2014-04-23
      • 2019-11-12
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-23
      • 2018-01-07
      • 2013-06-23
      • 2019-04-18
      相关资源
      最近更新 更多