Julia - n 嵌套循环

Posted

技术标签:

【中文标题】Julia - n 嵌套循环【英文标题】:Julia - n-nested loops 【发布时间】:2016-10-18 01:06:04 【问题描述】:

我试图在 Julia 中创建一个 n 嵌套循环方法

function fun(n::Int64)
    @nloops n i d->1:3 begin\n
        @nexprs n j->(print(i_j))\n
    end
end

但@nloops 的定义仅限于

_nloops(::Int64, ::Symbol, ::Expr, ::Expr...)

我得到了错误

_nloops(::Symbol, ::Symbol, ::Expr, ::Expr)

有什么办法可以使这个工作吗?非常感谢任何帮助

编辑:

我最终做的是使用组合方法

对于我的问题,我需要获取所有索引的 k 组合以从数组中提取值,因此循环必须看起来像

for i_1 in 1:100
    for i_2 in i_1:100
        ...
           for i_k in i_[k-1]:100

【问题讨论】:

得到了完全相同的问题 :-) 【参考方案1】:

循环数需要是一个编译时常量——实际上是一个数字字面量:为函数体生成的代码不能依赖于函数参数。 Julia 生成的函数也无济于事,因为 n 只是一个普通值,而不是任何参数类型的一部分。让嵌套循环的数量取决于运行时值(如 n)的最佳选择是使用递归。

【讨论】:

【参考方案2】:

在 julia-0.4 及更高版本中,您现在可以这样做:

function fun(n::Int)
    for I in CartesianRange(ntuple(d->1:3, n))
        @show I
    end
end

在大多数情况下,您不再需要 Base.Cartesian 宏(尽管仍有一些例外)。值得注意的是,正如 StefanKarpinski 的回答中所描述的,这个循环不会是“类型稳定的”,因为 n 不是编译时常量;如果性能很重要,您可以使用“功能障碍技术”。有关与这些事项相关的所有主题的更多信息,请参阅http://julialang.org/blog/2016/02/iteration。

【讨论】:

以上是关于Julia - n 嵌套循环的主要内容,如果未能解决你的问题,请参考以下文章

用C语言循环嵌套语句编出一个三角形形状

JS中for循环嵌套打印100以内3的倍数?

一般三个嵌套循环的 O(n^3) 复杂度的数学推导

计算嵌套循环的大 O

C语言中:两个for循环嵌套使用有什么作用?

java,for循环嵌套,打印菱形