在julia中将两个嵌套的for循环组合在一个for循环中

时间:2017-10-17 04:26:45

标签: for-loop julia

我有两个for循环,我想将它们组合成一个嵌套循环:

我的循环是这样的:

for i=1:m
    for j=1:n
        .....
    end
end

我试图将它们组合在一起:

for ii = 1:n*m
    ai = ii%n 
    yi = ii % m
    if(ai == 0)
        ai=6
    end
    if(yi == 0)
        yi=5
    end
    println("ai=$ai , yi=$yi")
end

所以我得到了这个结果:

ai=1 , yi=1
ai=2 , yi=2
ai=3 , yi=3
ai=4 , yi=4
ai=5 , yi=5
ai=6 , yi=1
ai=1 , yi=2
ai=2 , yi=3
ai=3 , yi=4
ai=4 , yi=5
ai=5 , yi=1
ai=6 , yi=2
ai=1 , yi=3
ai=2 , yi=4
ai=3 , yi=5
ai=4 , yi=1
ai=5 , yi=2
ai=6 , yi=3
ai=1 , yi=4
ai=2 , yi=5
ai=3 , yi=1
ai=4 , yi=2
ai=5 , yi=3
ai=6 , yi=4
ai=1 , yi=5
ai=2 , yi=1
ai=3 , yi=2
ai=4 , yi=3
ai=5 , yi=4
ai=6 , yi=5

但我希望得到一些像这样的结果:

ai=1 , yi=1
ai=1 , yi=2
ai=1 , yi=3
ai=1 , yi=4
ai=1 , yi=5
ai=2 , yi=1
ai=2 , yi=2
ai=2 , yi=3
ai=2 , yi=4
ai=2 , yi=5
ai=3 , yi=1
ai=3 , yi=2
ai=3 , yi=3
ai=3 , yi=4
ai=3 , yi=5
ai=4 , yi=1
ai=4 , yi=2
ai=4 , yi=3
ai=4 , yi=4
ai=4 , yi=5
ai=5 , yi=1
ai=5 , yi=2
ai=5 , yi=3
ai=5 , yi=4
ai=5 , yi=5
ai=6 , yi=1
ai=6 , yi=2
ai=6 , yi=3
ai=6 , yi=4
ai=6 , yi=5

我不知道如何更改代码以获得一些嵌套结果。可以将两个for循环组合成一个for循环,以便它们在两个循环运行时运行相同吗?

3 个答案:

答案 0 :(得分:4)

for i=1:m, j=1:n
    .....
end

答案 1 :(得分:2)

如果您的实际使用只需要一次迭代,则可以使用Iterators.product

julia> for (i,j) in Iterators.product(1:4, 1:3)
           println("i=$i , j=$j")
       end
i=1 , j=1
i=2 , j=1
i=3 , j=1
i=4 , j=1
i=1 , j=2
i=2 , j=2
i=3 , j=2
i=4 , j=2
i=1 , j=3
i=2 , j=3
i=3 , j=3
i=4 , j=3

答案 2 :(得分:2)

修改

Julia有很好的数学函数, divrem 是正确的答案! :)

 for ii = 1:n*m
     ai, yi = divrem(ii-1, n) .+ (1,1)      
     print(ai,",", yi, "  ")
 end
# Output: 1,1  1,2  1,3  1,4  2,1  2,2  2,3  2,4  3,1  3,2  3,3  3,4

旧答案:

如果这是关于朱莉娅的问题,那么如何不去做。 :)

m=3;n=4;

for ii = 1:m*n
    ai = div(ii-1, n) + 1  # division here
    yi = (ii-1)%n + 1      # modulo here
    print(ai,",", yi,"  ")
end

# Output: 1,1  1,2  1,3  1,4  2,1  2,2  2,3  2,4  3,1  3,2  3,3  3,4

但是你需要看到性能和可读性比这段代码更差

for ai in 1:3
    for yi in 1:4 
        print(ai,",", yi,"; ")
    end
end