用法:
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)
线性和笛卡尔指数之间的转换
线性索引到笛卡尔索引的转换利用了 CartesianIndices
是 AbstractArray
并且可以线性索引的事实:
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
相关用法
- Julia IteratorsMD.CartesianIndex用法及代码示例
- Julia Iterators.partition用法及代码示例
- Julia Iterators.rest用法及代码示例
- Julia Iterators.enumerate用法及代码示例
- Julia Iterators.zip用法及代码示例
- Julia Iterators.filter用法及代码示例
- Julia Iterators.drop用法及代码示例
- Julia Iterators.countfrom用法及代码示例
- Julia Iterators.Stateful用法及代码示例
- Julia Iterators.product用法及代码示例
- Julia Iterators.accumulate用法及代码示例
- Julia Iterators.map用法及代码示例
- Julia Iterators.dropwhile用法及代码示例
- Julia Iterators.peel用法及代码示例
- Julia Iterators.reverse用法及代码示例
- Julia Iterators.repeated用法及代码示例
- Julia Iterators.takewhile用法及代码示例
- Julia Iterators.cycle用法及代码示例
- Julia Iterators.take用法及代码示例
- Julia Iterators.flatten用法及代码示例
- Julia InteractiveUtils.supertypes用法及代码示例
- Julia IdDict用法及代码示例
- Julia InteractiveUtils.subtypes用法及代码示例
- Julia Inf用法及代码示例
- Julia IOBuffer用法及代码示例
注:本文由纯净天空筛选整理自julialang.org 大神的英文原创作品 Base.IteratorsMD.CartesianIndices — Type。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。