我可以像这样做一个两级嵌套循环
for i1 in 1:n
for i2 in 1:n
do something with (i1,i2)
如何将其扩展到任意级别的嵌套循环?
例如,我可以在Python中执行此操作以循环n ^ m
的笛卡尔积for i in (itertools.product(xrange(n),repeat=m)):
像
for i in (itertools.product(xrange(2),repeat=3)):
print i
(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(0, 1, 1)
(1, 0, 0)
(1, 0, 1)
(1, 1, 0)
(1, 1, 1)
感谢@ tholy的评论。我已经成功应用了Iterators.jl。我是朱莉娅的新手,所以我的代码可能很笨拙。
for i in product(repmat(Any[1:2],3)...)
println(i)
end
(1,1,1)
(2,1,1)
(1,2,1)
(2,2,1)
(1,1,2)
(2,1,2)
(1,2,2)
(2,2,2)
答案 0 :(得分:5)
在v0.5中,Base中有一个产品迭代器,因此您现在可以将其写为Base.product(fill(1:2,3)...)
。 fill
生成一个重复某些值的数组;我发现这比创建1元素数组并调用repmat
更优雅。
答案 1 :(得分:1)
Cartesian.jl包可以在某种程度上提供您想要的功能。
我对如何使用它知之甚少,但我能够至少重现Python代码的相同结果,但是由于我无法替换{{1},因此可能不够“随意”通过变量在循环体中。
3
希望有人知道这个包可以给出更好的答案。
只是额外的:Julia接受这个漂亮的循环语法:
julia> using Cartesian
julia> @nloops 3 i d->0:1 begin
println(@ntuple 3 i)
end
(0,0,0)
(1,0,0)
(0,1,0)
(1,1,0)
(0,0,1)
(1,0,1)
(0,1,1)
(1,1,1)
答案 2 :(得分:0)
通常,递归,函数调用自身。我必须有一个更详细的问题来给你一个更详细的回应。