This answser使我想到另一个问题:
在定义这样的新结构时:
struct ReversedRowMajor{T,A} <: AbstractMatrix{T}
data::A
end
ReversedRowMajor(data::AbstractMatrix{T}) where {T} = ReversedRowMajor{T, typeof(data)}(data)
Base.size(R::ReversedRowMajor) = reverse(size(R.data))
Base.getindex(R::ReversedRowMajor, i::Int, j::Int) = R.data[end-j+1, end-i+1]
如果R
是一个ReversedRowMajor
数组,则在访问R[:,:]
时,Julia将按照该数组最快的顺序(即内存顺序)遍历CartesianIndices
。 (请参阅array performance tips),但在这种情况下,这不是预期的,因为我们正在排列索引:(i,j)→(end-j + 1,end-i + 1)。
所以问题是:给定一个数组,有没有办法告诉Julia哪个轴是最快的?