"反向" arrayfun

时间:2016-09-20 18:45:32

标签: matlab structure

我有一个&#34;对象&#34;结构<algorithm>,我必须经常转换为对象结构的每个元素的单个数组。这可以使用OBJECT_ARRAY完成。这比单纯裁判arrayfun更乏味,但这就是The Mathworks选择这样做的原因。

在今天的这种情况下,我已经使用了那些单独的数组并为每个元素计算了相应的派生值OBJECT_ARRAY(k).item1,我需要将其添加到原始结构数组中。所以我有一个newItem数组。

是否有一种直接的方式为newItems中的每个对象执行分配,以便(有效地)OBJECT_ARRAY为每个索引OBJECT_ARRAY(k).newItem = newItems(k)

我使用的是2015a版。

1 个答案:

答案 0 :(得分:5)

你不应该arrayfun任何一个。

要获取值,您可以简单地依赖于非标量struct或对象的点索引产生comma-separated list这一事实。如果我们用[]包围它,它会将所有值水平连接成一个数组。

array_of_values = [OBJECT_ARRAY.item1];

或者如果它们都是不能连接的大小,请使用单元格数组

array_of_values = {OBJECT_ARRAY.item1};

要执行分配,您可以再次使用分配左侧和右侧的逗号分隔列表。我们首先将新值粘贴到单元格数组中,以便我们可以使用{:}自动将它们转换为以逗号分隔的列表。

items = num2cell(newitems);
[OBJECT_ARRAY.item1] = items{:};