當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Julia IteratorsMD.CartesianIndices用法及代碼示例


用法:

CartesianIndices(sz::Dims) -> R
CartesianIndices((istart:[istep:]istop, jstart:[jstep:]jstop, ...)) -> R

定義一個跨越整數索引的多維矩形範圍的區域R。這些在迭代上下文中最常見,其中 for I in R ... end 將返回與嵌套循環等效的 CartesianIndex 索引 I

for j = jstart:jstep:jstop
    for i = istart:istep:istop
        ...
    end
end

因此,這些對於編寫在任意維度上工作的算法很有用。

CartesianIndices(A::AbstractArray) -> R

為方便起見,從數組構造 CartesianIndices 會生成其索引範圍。

Julia 1.6

步距法CartesianIndices((istart:istep:istop, jstart:[jstep:]jstop, ...))至少需要 Julia 1.6。

例子

julia> foreach(println, CartesianIndices((2, 2, 2)))
CartesianIndex(1, 1, 1)
CartesianIndex(2, 1, 1)
CartesianIndex(1, 2, 1)
CartesianIndex(2, 2, 1)
CartesianIndex(1, 1, 2)
CartesianIndex(2, 1, 2)
CartesianIndex(1, 2, 2)
CartesianIndex(2, 2, 2)

julia> CartesianIndices(fill(1, (2,3)))
2×3 CartesianIndices{2, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}}:
 CartesianIndex(1, 1)  CartesianIndex(1, 2)  CartesianIndex(1, 3)
 CartesianIndex(2, 1)  CartesianIndex(2, 2)  CartesianIndex(2, 3)

線性和笛卡爾指數之間的轉換

線性索引到笛卡爾索引的轉換利用了 CartesianIndicesAbstractArray 並且可以線性索引的事實:

julia> cartesian = CartesianIndices((1:3, 1:2))
3×2 CartesianIndices{2, Tuple{UnitRange{Int64}, UnitRange{Int64}}}:
 CartesianIndex(1, 1)  CartesianIndex(1, 2)
 CartesianIndex(2, 1)  CartesianIndex(2, 2)
 CartesianIndex(3, 1)  CartesianIndex(3, 2)

julia> cartesian[4]
CartesianIndex(1, 2)

julia> cartesian = CartesianIndices((1:2:5, 1:2))
3×2 CartesianIndices{2, Tuple{StepRange{Int64, Int64}, UnitRange{Int64}}}:
 CartesianIndex(1, 1)  CartesianIndex(1, 2)
 CartesianIndex(3, 1)  CartesianIndex(3, 2)
 CartesianIndex(5, 1)  CartesianIndex(5, 2)

julia> cartesian[2, 2]
CartesianIndex(3, 2)

廣播

CartesianIndices 使用 CartesianIndex 支持廣播算術(+ 和 -)。

Julia 1.1

CartesianIndices 的廣播至少需要 Julia 1.1。

julia> CIs = CartesianIndices((2:3, 5:6))
2×2 CartesianIndices{2, Tuple{UnitRange{Int64}, UnitRange{Int64}}}:
 CartesianIndex(2, 5)  CartesianIndex(2, 6)
 CartesianIndex(3, 5)  CartesianIndex(3, 6)

julia> CI = CartesianIndex(3, 4)
CartesianIndex(3, 4)

julia> CIs .+ CI
2×2 CartesianIndices{2, Tuple{UnitRange{Int64}, UnitRange{Int64}}}:
 CartesianIndex(5, 9)  CartesianIndex(5, 10)
 CartesianIndex(6, 9)  CartesianIndex(6, 10)

對於笛卡爾到線性索引的轉換,請參閱 LinearIndices

相關用法


注:本文由純淨天空篩選整理自julialang.org 大神的英文原創作品 Base.IteratorsMD.CartesianIndices — Type。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。