如何在Julia中索引循环数组?

时间:2019-12-21 11:56:31

标签: arrays indexing julia

我想以循环方式访问数组中的元素。通常,取模就足够了,但是在Julia数组中,从1开始。目前,我基本上是将索引转换为基于0的索引,然后再转换回来。但这不适用于负索引。

A = 1:5
for i in -6:6
    println(i, " -> ", ((i - 1) % length(A)) + 1)
end

输出

-6 -> -1 # wrong
-5 ->  0 # wrong
-4 ->  1 # wrong
-3 -> -3 # wrong
-2 -> -2 # wrong
-1 -> -1 # wrong
 0 ->  0 # wrong
 1 ->  1
 2 ->  2
 3 ->  3
 4 ->  4
 5 ->  5
 6 ->  1

2 个答案:

答案 0 :(得分:8)

我通常为此使用mod1函数。这是一个示例:

julia> [-10:10 mod1.(-10:10, 5)]
21×2 Array{Int64,2}:
 -10  5
  -9  1
  -8  2
  -7  3
  -6  4
  -5  5
  -4  1
  -3  2
  -2  3
  -1  4
   0  5
   1  1
   2  2
   3  3
   4  4
   5  5
   6  1
   7  2
   8  3
   9  4
  10  5

答案 1 :(得分:2)

您怀疑%运算符不是mod运算符,而是rem运算符。

mod( i-1, length(A) )替换模运算,您将获得预期的结果。


PS。我将不得不补充,这种循环的用例也很重要。如果您要复制类似python的负索引,其中负索引-1索引数组的最后一个元素,并从该点开始以这种方式循环循环以获取负数,则必须对0进行不同的处理和两个不同的分支,一个代表正数,一个代表负数。

相关问题