【问题标题】:matlab: structural data and multi-level indexingmatlab:结构数据和多级索引
【发布时间】:2012-04-03 05:46:58
【问题描述】:

我有一个简单的结构问题。

让我们创建:

x(1).a(:, :) = magic(2);
x(2).a(:, :) = magic(2)*2;
x(3).a(:, :) = magic(2)*3;

如何从所有 x-es 中列出 a(1, 1)?

我想这样做:

x(1, :).a(1,1)

但是有一个错误“这种类型的多级索引需要标量索引。”

如何处理它?我知道我可以用循环来做到这一点,但这可能是最糟糕的解决方案:) 谢谢!

【问题讨论】:

    标签: arrays matlab indexing structure multi-level


    【解决方案1】:

    您也可以通过这种方式获取数据:

    B = cat(3,x.a);
    out = reshape(B(1,1,:),1,[]);
    

    顺便说一句,循环并不邪恶。有时它们甚至比矢量化索引更快。尝试两种方式,看看哪种方式最适合您:

    • 速度 - 使用分析器检查
    • 代码清晰度 - 取决于上下文。有时矢量化代码看起来更好,有时则相反。

    【讨论】:

      【解决方案2】:

      如果这是您想要对其进行的查询,这不是最好的数据结构,正是因为这种索引不能直接完成。

      但是,这是一种可行的方法:

      cellfun(@(X) X(1,1), {x.a})
      

      语法{x.a}x 从“结构数组”转换为元胞数组。然后我们使用cellfun 在元胞数组上应用一个函数作为映射。匿名函数@(X) X(1,1) 接受一个参数X 并返回X(1,1)

      【讨论】:

      • 谢谢。但是如果我想拥有 f.ex 怎么办? x(1, :).a(:,1)?
      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多