当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。