【发布时间】:2017-02-15 17:09:14
【问题描述】:
我正在处理一个问题,最初我需要使用嵌套的for 循环。我想知道是否有办法将大量 for 循环组合成一个。
此外,我找到了一个答案here,但它需要首先生成所有可能的组合,这在内存要求方面可能很糟糕。我的for 循环由许多相互独立的变量组成,用于评估成本函数,例如:
for x1 = 1:10
for x2 = 2:15
for x3 = 3:5
for x4 = 7:9
%and so on
cost = J(x1, x2, x3, x4) %or more
end
end
end
end
如果我提前知道我需要使用多少个变量,有没有办法让这个块更简单?
【问题讨论】:
-
你可以优化一个循环取决于它做什么。如果有一种使嵌套循环成为一个单一循环的通用方法,那么一开始就不会有嵌套循环。另外,尽量避免不必要的格式化。
-
添加到我之前的评论中。几乎所有的代码优化都依赖于内存和计算时间之间的弱平衡。一般来说,您需要选择一种,并注意另一种可能会变得更糟。
-
另一种选择是修改
J()以接受向量并返回一个 n-dim(n 是提供的变量的数量)张量,但这也回到了内存和时间之间的平衡。 -
你可以用 Python 中的迭代器很好地做到这一点(保持低内存复杂度)——但据我所知,Matlab 中不存在等效结构。
-
@Florian Iterators 在这种情况下确实非常有用。