Comments (4)
I think it used to error, we mustn't have actually tested that it did.
But now Im not sure if it should? A zero length range is allowed in indexing.
from dimensionaldata.jl.
Yes, a zero length range is allowed, but this is a range which is not empty but has no overlap to the range of the time axis of the DimArray.
Sorry I was not clear.
In this example the time axis of the array is the month from 1996 but I am trying to subset with a interval from 1995.
One gets an Array back with one dimension zero which can't be used for anything afterwards.
julia> dims(r,Ti)
Ti Sampled{DateTime} ForwardOrdered Explicit DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}
wrapping: 12-element Vector{DateTime}:
1996-01-16T12:00:00
1996-02-15T12:00:00
1996-03-16T12:00:00
1996-04-16T00:00:00
1996-05-16T12:00:00
1996-06-16T00:00:00
1996-07-16T12:00:00
1996-08-16T12:00:00
1996-09-16T00:00:00
1996-10-16T12:00:00
1996-11-16T00:00:00
1996-12-16T12:00:00
The other case would be to have a zero length interval and then the subsetting should work and return a slice of the data. This also works for an MWE but it fails as well for the example data with a time axis:
julia> summer = rger[Ti=Date(1996,4,1)..Date(1996, 4,1)]
104×142×0 Raster{Union{Missing, Float32},3} tas with dimensions:
X Sampled{Float64} Float64[-7.557552218296486, -7.502551037136502, …, -1.9474317399783132, -1.8924305588183294] ForwardOrdered Explicit Intervals{Center},
Y Sampled{Float64} Float64[-3.1625523990153646, -3.107551183040055, …, 4.537617837528135, 4.592619053503444] ForwardOrdered Explicit Intervals{Center},
Ti Sampled{DateTime} DateTime[] ForwardOrdered Explicit Intervals{Center}
extent: Error showing value of type Raster{Union{Missing, Float32}, 3, Tuple{X{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, Vector{Float64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{Float64}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}, Y{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, Vector{Float64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{Float64}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}, Ti{DimensionalData.Dimensions.LookupArrays.Sampled{DateTime, Vector{DateTime}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{DateTime}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}}, Tuple{}, Array{Union{Missing, Float32}, 3}, Symbol, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}, Missing}:
ERROR: BoundsError: attempt to access 2×0 Matrix{DateTime} at index [1, 1]
Stacktrace:
[1] getindex
@ ./essentials.jl:14 [inlined]
[2] _bounds
@ ~/.julia/packages/DimensionalData/lbGZS/src/LookupArrays/lookup_arrays.jl:204 [inlined]
[3] _bounds
@ ~/.julia/packages/DimensionalData/lbGZS/src/LookupArrays/lookup_arrays.jl:202 [inlined]
[4] _bounds
@ ~/.julia/packages/DimensionalData/lbGZS/src/LookupArrays/lookup_arrays.jl:198 [inlined]
[5] bounds
@ ~/.julia/packages/DimensionalData/lbGZS/src/LookupArrays/lookup_arrays.jl:194 [inlined]
[6] bounds
@ ~/.julia/packages/DimensionalData/lbGZS/src/Dimensions/dimension.jl:193 [inlined]
[7] map
@ ./tuple.jl:275 [inlined]
[8] bounds
@ ~/.julia/packages/DimensionalData/lbGZS/src/Dimensions/dimension.jl:222 [inlined]
[9] extent
@ ~/.julia/packages/DimensionalData/lbGZS/src/Dimensions/dimension.jl:277 [inlined]
[10] extent
@ ~/.julia/packages/DimensionalData/lbGZS/src/array/array.jl:65 [inlined]
[11] show_after(io::IOContext{Base.TTY}, mime::MIME{Symbol("text/plain")}, A::Raster{Union{Missing, Float32}, 3, Tuple{X{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, Vector{Float64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{Float64}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}, Y{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, Vector{Float64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{Float64}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}, Ti{DimensionalData.Dimensions.LookupArrays.Sampled{DateTime, Vector{DateTime}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{DateTime}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}}, Tuple{}, Array{Union{Missing, Float32}, 3}, Symbol, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}, Missing})
@ Rasters ~/.julia/packages/Rasters/k5UxK/src/show.jl:5
[12] show(io::IOContext{Base.TTY}, mime::MIME{Symbol("text/plain")}, A::Raster{Union{Missing, Float32}, 3, Tuple{X{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, Vector{Float64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{Float64}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}, Y{DimensionalData.Dimensions.LookupArrays.Sampled{Float64, Vector{Float64}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{Float64}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}, Ti{DimensionalData.Dimensions.LookupArrays.Sampled{DateTime, Vector{DateTime}, DimensionalData.Dimensions.LookupArrays.ForwardOrdered, DimensionalData.Dimensions.LookupArrays.Explicit{Matrix{DateTime}}, DimensionalData.Dimensions.LookupArrays.Intervals{DimensionalData.Dimensions.LookupArrays.Center}, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}}}}, Tuple{}, Array{Union{Missing, Float32}, 3}, Symbol, DimensionalData.Dimensions.LookupArrays.Metadata{Rasters.NCDsource, Dict{String, Any}}, Missing})
@ DimensionalData ~/.julia/packages/DimensionalData/lbGZS/src/array/show.jl:27
[13] (::REPL.var"#55#56"{REPL.REPLDisplay{REPL.LineEditREPL}, MIME{Symbol("text/plain")}, Base.RefValue{Any}})(io::Any)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:276
[14] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:557
[15] display(d::REPL.REPLDisplay, mime::MIME{Symbol("text/plain")}, x::Any)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:262
[16] display(d::REPL.REPLDisplay, x::Any)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:281
[17] display(x::Any)
@ Base.Multimedia ./multimedia.jl:340
[18] #invokelatest#2
@ ./essentials.jl:819 [inlined]
[19] invokelatest
@ ./essentials.jl:816 [inlined]
[20] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:305
[21] (::REPL.var"#57#58"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:287
[22] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:557
[23] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:285
[24] (::REPL.var"#do_respond#80"{Bool, Bool, REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:899
[25] (::VSCodeServer.var"#101#104"{REPL.var"#do_respond#80"{Bool, Bool, REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt}})(mi::REPL.LineEdit.MIState, buf::IOBuffer, ok::Bool)
@ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.61.2/scripts/packages/VSCodeServer/src/repl.jl:122
[26] #invokelatest#2
@ ./essentials.jl:819 [inlined]
[27] invokelatest
@ ./essentials.jl:816 [inlined]
[28] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
@ REPL.LineEdit ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/LineEdit.jl:2647
[29] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
@ REPL ~/.julia/juliaup/julia-1.9.4+0.x64.linux.gnu/share/julia/stdlib/v1.9/REPL/src/REPL.jl:1300
[30] (::REPL.var"#62#68"{REPL.LineEditREPL, REPL.REPLBackendRef})()
@ REPL ./task.jl:514
from dimensionaldata.jl.
For a plain DimArray subsetting with a zero width interval works as expected but I still would expect the out of bounds case to throw a BoundsError:
julia> arr = DimArray(reshape(1:100,10,10), (X(1:10), Y(1:10)))
10×10 DimArray{Int64,2} with dimensions:
X Sampled{Int64} 1:10 ForwardOrdered Regular Points,
Y Sampled{Int64} 1:10 ForwardOrdered Regular Points
1 2 3 4 5 6 7 8 9 10
1 1 11 21 31 41 51 61 71 81 91
2 2 12 22 32 42 52 62 72 82 92
⋮ ⋮ ⋮
9 9 19 29 39 49 59 69 79 89 99
10 10 20 30 40 50 60 70 80 90 100
julia> arr[X=1..1]
1×10 DimArray{Int64,2} with dimensions:
X Sampled{Int64} 1:1 ForwardOrdered Regular Points,
Y Sampled{Int64} 1:10 ForwardOrdered Regular Points
1 2 3 4 5 6 7 8 9 10
1 1 11 21 31 41 51 61 71 81 91
julia> arr[X=100..103] # This should throw a BoundsError
0×10 DimArray{Int64,2} with dimensions:
X Sampled{Int64} 11:10 ForwardOrdered Regular Points,
Y Sampled{Int64} 1:10 ForwardOrdered Regular Points
1 2 3 4 5 6 7 8 9 10
from dimensionaldata.jl.
Ah ok that makes sense. Yeah it should be out if bounds.
from dimensionaldata.jl.
Related Issues (20)
- Add a DiskArrays extension HOT 1
- Forward `eachindex` and/or `Generator` to the parent array?
- New type instability issues
- missing function in plot recipe HOT 1
- New logo? HOT 26
- image should use extrema of dimensions and not the full lookup HOT 1
- `pairs` of DimVector do not reflect lookup values HOT 5
- Cannot write CSV from diskbased DimArray
- `end` doesn't work correctly HOT 4
- implement `@broadcast_dims` macro HOT 2
- Would it make sense to add support for defining dimensions with a symbol -OR- string? HOT 4
- Dimension mismatch: `DimSelectors` with alphabetized labels HOT 3
- spy(dd) not working because of ambiguity HOT 3
- display error for 0-dim array wrapped by Dimension HOT 1
- Feature request: Makie convert_arguments for DimPoints in PointBased
- `spy` on dimarrays with missings is still broken HOT 2
- README/package intro: what _is_ a dimensional array? what are these x and y things? HOT 1
- Lookup conversion helper functions
- Better handling of `NaN` in selectors and Extent
- document `hasdim` HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dimensionaldata.jl.