【发布时间】:2020-12-02 02:07:17
【问题描述】:
我有几个向量,并想用它们来填充结构数组中的字段。向量只会有两种长度之一 - 它们的长度为 N 或长度为 1。例如,如果 N=3,我的向量可能如下所示:
a = [0 5 7]
b = [-2 6 8]
c = 6
d = [11 12 13]
e = 20
我希望结果是
my_structure(1).a = 0
my_structure(2).a = 5
my_structure(3).a = 7
my_structure(1).b = -2
my_structure(2).b = 6
my_structure(3).b = 8
my_structure(1).c = 6
my_structure(2).c = 6
my_structure(3).c = 6
my_structure(1).d = 11
my_structure(2).d = 12
my_structure(3).d = 13
my_structure(1).e = 20
my_structure(2).e = 20
my_structure(3).e = 20
您可以看到,对于仅初始长度为 1 的向量,结构数组的每个元素都应具有相同的值。
有没有一种简洁的方法来实现这一点而不必遍历每个元素?它应该是可扩展的,以便我可以添加更多向量 f,g,h,... 如果需要。
正如在 cmets 中查询的那样,我不能简单地使用 my_structure.a = [0 5 7] 等,因为我需要能够将 my_structure(i) 传递给另一个函数,这要求每个字段只包含一个值(而不是数组)。
【问题讨论】:
-
循环比这样的手写要简洁得多。在 MATLAB 中循环很慢是一个谬论,尤其是在最新的 JIT 更新之后。为什么循环不适合您的目的?
-
我不想这样手写 - 我只是写它来显示我希望每个查询的结果。
-
@Adriaan 我知道 Matlab 中有这些 arrayfun() 和 structfun() 函数,所以我怀疑有一种巧妙的方法可以使用它们来做到这一点。我一点也不担心循环变慢。
标签: arrays matlab vector struct