【问题标题】:Applying an operation to every element of a array of struct that combines multiple fields of the struct in a array of struct将操作应用于结构数组的每个元素,该操作将结构的多个字段组合到结构数组中
【发布时间】:2023-03-05 21:57:01
【问题描述】:

我正在使用 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 这样的函数可以用于数组的每个元素,并且执行代码所花费的时间要少得多。 提前致谢

【问题讨论】:

    标签: arrays matlab struct performance


    【解决方案1】:

    你能用吗:

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

    ?

    之后您可能需要转置,具体取决于您希望 adding 成为行向量还是列向量。

    【讨论】:

      【解决方案2】:

      您可以使用edge(:) 消除循环并将字段括在括号中,例如[edge(:).end],如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多