如何告诉Julia在数组中以哪个顺序进行迭代?

时间:2019-03-29 10:50:14

标签: performance indexing iteration julia

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哪个轴是最快的?

(另请参见Multidimensional algorithms and iteration

0 个答案:

没有答案