代码之家  ›  专栏  ›  技术社区  ›  Fazeleh

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

  •  4
  • Fazeleh  · 技术社区  · 7 年前

    我有两个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
    

    3 回复  |  直到 7 年前
        1
  •  15
  •   Michael K. Borregaard    7 年前

    for i=1:m, j=1:n
        .....
    end
    
        2
  •  3
  •   Liso    7 年前

    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
    

    旧答案:

    如果这是关于Julia的问题,那么怎么不做呢

    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
    
        3
  •  2
  •   mbauman    7 年前

    您可以使用 Iterators.product 如果您的实际使用只需要一个iterable:

    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