【问题标题】:Vectorizing structure field access (or modify) matlab? Is it even possible?矢量化结构字段访问(或修改)matlab?甚至可能吗?
【发布时间】:2017-06-26 04:49:30
【问题描述】:

经过多年的匿名,我刚刚创建了自己的帐户来提出一个困扰我一段时间的问题,但我似乎无法找到答案。我真的,真的试过了!就是这样:

如果你有matlab结构数组:

something(1).toSay = 'qwe';

something(2).toSay = 'asd';

something(3).toSay = 'zxc';

有什么方法可以矢量化这 3 个字段 toSay 的重新分配?

喜欢

something = magicFunction(something, [1:3], 'toSay', {'newString1','newString2','newString3'})

最终结果是:

something(2).toSay >> 'newString2'

我尝试了一些与setfield 功能一起使用的方法,但无法使其工作。我试图解决这个问题就是避免 for-loop

问题 2:如果它是结构元胞数组而不是结构体数组,会有什么不同吗?

【问题讨论】:

    标签: arrays matlab vectorization variable-assignment matlab-struct


    【解决方案1】:

    您可以将替换字符串放在元胞数组中,然后使用{:} 索引在赋值的右侧创建comma separated list。在左侧,something(1:3).toSay 已经创建了一个逗号分隔列表,因此我们可以将其括在 [] 中,以便将右侧的值分配给左侧对应的字段。

    newvalues = {'newString1', 'newString2', 'newString3'};
    [something(1:3).toSay] = newvalues{:};
    

    请参阅:Assigning output from a comma separated listAssigning to a comma separated list

    关于您的第二个问题,将其设为结构元胞数组将需要额外的步骤,因为当结构位于元胞数组中时,您无法直接创建逗号分隔列表。您必须先将它们转换为结构数组

    sarray = [something{1:3}];
    [sarray.toSay] = newValues{:};
    something(1:3) = num2cell(sarray);
    

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多