【问题标题】:MATLAB - How to resolve "Subscripted assignment between dissimilar structures" ERRORMATLAB - 如何解决“不同结构之间的下标分配”错误
【发布时间】:2015-11-25 23:16:03
【问题描述】:

我有一个名为 A 的结构,它有一个名为 B 的 [1x1] 结构,当我在命令行中运行 A.B 时,它返回两种类型的答案:

ans = 
    X: 3
    Y: 2
    Z: 4

ans = 
    X: 1
    Y: 5
    Z: 9
    W: 4
    V: 2

编辑: 我正在尝试做的是将 X 的所有值放入一个向量中,以便该向量看起来像这样:[3, 1, ...]

为此,我首先创建了一个名为 AB 的向量,以便我可以将 [AB.X] 放入另一个我可以使用的向量中。

我目前的策略是像这样运行一个 for 循环:

for idx = 1:length(A)
    AB(idx) = [A(idx).B];
end

但我收到错误消息“不同结构之间的下标赋值”。我认为这是因为 B 的某些值有 3 个部分,而另一些有 5 个部分。

我该如何解决这个问题?

或者有没有比使用 for 循环更好的方法?

【问题讨论】:

  • 你到底想把什么放到另一个向量中?您想要struct 中每个字段的值吗?你在做A.B 时会得到它,因为A 是一个双元素结构。第一个struct 元素有三个字段,而另一个元素有五个。通过执行A.B,您将解压缩所有structs,并且它无处可去,因此它会用每个struct 淹没命令提示符。
  • @rayryeng - 我想要这样的东西: AB(1) = A(1).B 这将给出 X: 2, Y: 4, Z: 2 等我也做了编辑我原来的问题

标签: matlab


【解决方案1】:

结构不能与不同的字段连接在一起。要获得 X,您可以做的一件事是将所有结构元素放入一个元胞数组中,然后调用 cellfun 以取消对 X 的引用:

 ABX = cellfun(@(c) c.X, {A.B}) 

资源:

Comma separated lists

cellfun

Anonymous functions

【讨论】:

  • 这是给您的回复。你能给我一个简短的例子吗?我不确定“将所有结构元素放入单元格数组”是什么意思
  • 示例如上所示。当您说 AB 时,您会得到一个“逗号分隔列表”的值(这些是您在命令窗口中获得的答案。如果您将它们包装在卷曲“{”和“}”中,那么就像说:{ A(1).B, A(2).B} 等等,所以它们都在一个单元格数组中创建。一旦它们都在一个单元格数组中,您可以对它们进行 cellfun 以取消引用 X 字段,正如您最终所说的那样想要
  • 这里的“c”到底是什么?
  • cellfun 的第一个参数是一个函数句柄,用于应用于元胞数组中的所有元胞。 cellfun 然后将元胞数组的每个单独元胞中的值传递给此函数。在这种情况下,我使用“@(c)”语法定义了一个匿名函数,并且该匿名函数接受一个我称之为“c”的参数。这成为 cellfun 调用中每个单元格的值。在传入每个单元格时,我取消引用 X 字段以获取值,然后 cellfun 将它们连接在一起。
猜你喜欢
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 2011-07-28
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多