在Python中,可以使用标准的[::-1]
反转Numpy数组。
A = np.diag(np.arange(1,3))
A[::, ::-1]
A[::-1]
A[::-1, ::-1]
Julia不支持[::-1]
,而且reverse
方法只适用于1D数组和仅限于1D列(而行默认为2D)。
我是否错过了其他替代方法?
尝试以下方式,它与 numpy
版本本质上相同:
julia> X = rand(3,3)
3x3 Array{Float64,2}:
0.782622 0.996359 0.335781
0.719058 0.188848 0.985693
0.455355 0.910717 0.870187
julia> X[end:-1:1,end:-1:1]
3x3 Array{Float64,2}:
0.870187 0.910717 0.455355
0.985693 0.188848 0.719058
0.335781 0.996359 0.782622
end
和1
是隐含的,因此无论其他语言经验如何,它似乎更自然。 - IainDunning1:length(arr)
的数组,那么你应该使用 X[end:-1:begin]
。 - BallpointBenjulia> reverse([1, 2, 3])
3-element Array{Int64,1}:
3
2
1
julia> reverse([1 2 3], dims=2)
1×3 Array{Int64,2}:
3 2 1
编辑:或者您也可以使用 end:-1:1
进行反向索引,这种方法还允许您请求视图而不是副本:
julia> a = reshape(randperm(9), 3, 3)
3×3 Matrix{Int64}:
4 7 9
5 2 1
3 6 8
julia> @view a[:, end:-1:1]
3×3 view(::Matrix{Int64}, :, 3:-1:1) with eltype Int64:
9 7 4
1 2 5
8 6 3
在回答@IainDunning的问题时,numpy和Julia之间的一个重要区别是,Julia中的X [:, end:-1:1]
返回一个副本,而在numpy中,X [:, ::-1]
将返回相同数据的视图(不会进行复制)。
我自己正在学习Julia,但似乎您可以使用sub(X,:,size(X)[2]:-1:1)
在Julia中实现类似的功能,它返回Julia的等效视图(SubArray
)。有趣的是,在这种构造中,您不能使用end
关键字,只能通过传递维度中的实际结束索引来实现。
sub
现在在 Julia v0.5 中被称为 view
。 - Kevin L. Keys尝试使用这组函数:
function reverser(x::AbstractArray, dims::AbstractVector{<:Integer})
y = copy(x)
for d in dims
y = reverse(y, dims=d)
end
return y
end
reverser(x::AbstractArray) = reverser(x, 1:ndims(x)) # all dimensions
reverser(x::AbstractArray, d::Integer) = reverser(x, [1])