2017-01-07 29 views
7

使用rol(a,1)a=BitArray([true,true,false])产生以下结果:旋转非比特串在朱莉娅

julia> rol(a,1) 
3-element BitArray{1}: 
true 
false 
true 

我如何可以旋转非比特串?例如,我有b=[1,2,3,4],并希望得到以下输出:[2,3,4,1]

回答

8

你正在寻找circshift

julia> circshift([1,2,3,4], -1) 
4-element Array{Int64,1}: 
2 
3 
4 
1 
+3

这是因为这些功能非常相似,所以可能是API整合的一个好候选。 – StefanKarpinski

1

circshift你想要做什么,按照公认的答案。然而,仅仅添加到这一点,你也可以手动操作指数:

julia> a = [1,2,3,4]; 
julia> a[[2:end; 1]] |> show 
    [2,3,4,1] 
julia> a[[3:end; 1:2]] |> show 
    [3,4,1,2] 

其实,你在做什么这里是“线性”“整数数组”的索引,所以元件的数量可以是4次以上(即,相同的位置可被多次访问或根本不):

julia> a[[3:end; 1:2; 1; 2; 2; 1]] |> show 
    [3,4,1,2,1,2,2,1] 

julia> a[[1:end; end-1:-1:1]] |> show 
    [1,2,3,4,3,2,1] 

这同样适用于更高维的数组:

julia> b = [1 2 3 4; 2 3 4 5; 3 4 5 6; 4 5 6 7]; 
julia> b[[2:end; 1], [1:3; 2:end; 1]] 
    4×7 Array{Int64,2}: 
    2 3 4 3 4 5 2 
    3 4 5 4 5 6 3 
    4 5 6 5 6 7 4 
    1 2 3 2 3 4 1 
+0

这不是通常所说的线性索引 - 即当您使用一个索引跨越多个维度时。 –

+0

谢谢@MattB。那么朱莉娅对此的首选术语是什么?我从matlab中借用了术语,这就是他们所说的(在matlab中,这是对matlab的引用,是列主要顺序,但我认为Julia是列主要顺序也并不意味着它应该使用相同的术语)。我知道Python调用这个“整数索引”。 –

+0

@MattB。 hm,julia文档似乎也称之为线性索引http://docs.julialang.org/en/stable/devdocs/subarrays/。你指的是不同的东西吗? –