将操作应用于struct数组的每个元素,该结构数组结构的结构的多个字段组合在一起

时间:2014-03-05 15:40:14

标签: arrays matlab struct performance

我正在使用MATLAB和

假设我有一个结构数组 edge ,其字段为edge.start,edge.end,edge.length。

现在我需要应用一个在结构的每个字段中添加值的函数。如何在不以下列方式访问数组中的每个元素的情况下执行此操作。

no_of_element = size(edge,2)
adding = [];

for i = 1:no_of_element
    adding = [adding;edge(i).start+edge(i).end+edge(i).length];
end

我的阵列边缘非常大。它包含一个国家的道路网络中的所有链接,并且循环需要很长时间,而且我还有许多其他功能,例如我在此处显示的添加操作。

是否有像find,arrayfun这样的函数可以用于数组的每个元素,并且执行代码所花费的时间要少得多。 提前致谢

2 个答案:

答案 0 :(得分:2)

你能使用:

adding = [edge.start] + [edge.end] + [edge.length];

您可能需要事后调换,具体取决于您是希望adding是行向量还是列向量。

答案 1 :(得分:1)

您可以使用edge(:)消除循环,并像[edge(:).end]一样将括号中的字段括起来:

adding_better = [edge(:).start]+ [edge(:).end] + [edge(:).length];