矢量化结构字段访问(或修改)matlab?它甚至可能吗?

时间:2017-02-08 14:07:33

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

经过多年的匿名,我刚刚创建了自己的帐户,提出了一段时间困扰我的问题,我似乎无法找到答案。我真的非常努力!在这里:

如果你有matlab结构数组:

something(1).toSay = 'qwe';

something(2).toSay = 'asd';

something(3).toSay = 'zxc';

有没有办法对字段toSay的这3个条目的重新分配进行矢量化?

喜欢

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

最终结果是:

something(2).toSay >> 'newString2'

我已尝试使用setfield功能,但无法使其正常工作。我试图解决这个问题就是避免使用 for-loop

问题2:如果它是结构的单元数组而不是结构数组会有所不同吗?

1 个答案:

答案 0 :(得分:0)

您可以将替换字符串放在单元格数组中,然后使用{:}索引在作业的右侧创建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);