Hi,
I’m building a function where as input I feed an array whose dimensions are not known a priori, but that is going to be of length 100 in each dimension. So it can be, as an input
a=rand(100) or a=rand(100,100) or a=rand(100,100,100) or ...
and I need to filter the middle elements only, so
a[45:55] or a[45:55,45:55] or a[45:55,45:55,45:55] or ...
I thought I could build up a range and use it depending on the number of dimensions of the array. In the simple case a=rand(100), this works
rng=45:55
a[rng]
but I don’t seem to be able to generalize that to more dimensions. For instance, with a=rand(100,100), what would be the way to get a[45:55,45:55]?
I’ve tried things like
rng=45:55
c=(rng,rng)
a[c]
but that does not work
ERROR: ArgumentError: invalid index: (45:55, 45:55) of type Tuple{UnitRange{Int64},UnitRange{Int64}}
Stacktrace:
[1] to_index(::Tuple{UnitRange{Int64},UnitRange{Int64}}) at ./indices.jl:270
[2] to_index(::Array{Float64,2}, ::Tuple{UnitRange{Int64},UnitRange{Int64}}) at ./indices.jl:247
[3] to_indices at ./indices.jl:298 [inlined]
[4] to_indices at ./indices.jl:295 [inlined]
[5] getindex(::Array{Float64,2}, ::Tuple{UnitRange{Int64},UnitRange{Int64}}) at ./abstractarray.jl:927
[6] top-level scope at none:0
What would be the easiest way to specify this multidimensional range?
Thanks in advance,
Ferran.