@@ -112,17 +112,14 @@ function decode(bin::Int, e::RectangularBinEncoding{B, V}) where {B, V}
112
112
return (V (Tuple (cartesian)) .- 1 ) .* edgelengths .+ mini
113
113
end
114
114
115
- function decode_from_bin (bin, b:: RectangularBinEncoding{B, T} ) where {B, T<: Real }
116
- (; mini, edgelengths) = b
117
- return (T (Tuple (bin)[1 ]) - 1 )* edgelengths + mini
118
- end
119
-
120
115
# #################################################################
121
- # Encoding bins using a *floating* (i.e. controlled by data) grid
116
+ # Initialization of encodings
122
117
# #################################################################
123
- function RectangularBinEncoding (x :: AbstractDataset{D,T} , b :: RectangularBinning ;
124
- n_eps = 2 ) where {D, T}
118
+ # Data-controlled grid
119
+ function RectangularBinEncoding (x, b :: RectangularBinning ; n_eps = 2 )
125
120
# This function always returns static vectors and is type stable
121
+ D = dimension (x)
122
+ T = eltype (x)
126
123
ϵ = b. ϵ
127
124
mini, maxi = minmaxima (x)
128
125
v = ones (SVector{D,T})
@@ -144,72 +141,32 @@ function RectangularBinEncoding(x::AbstractDataset{D,T}, b::RectangularBinning;
144
141
RectangularBinEncoding (b, mini, edgelengths, ci, li)
145
142
end
146
143
147
- function RectangularBinEncoding (x:: AbstractVector{<:Real} , b:: RectangularBinning ; n_eps = 2 )
148
- # This function always returns numbers and is type stable
149
- ϵ = b. ϵ
150
- mini, maxi = extrema (x)
151
- if ϵ isa AbstractFloat
152
- edgelength = ϵ
153
- elseif ϵ isa Int
154
- edgeslength_nonadjusted = (maxi - mini)/ ϵ
155
- # Round-off occurs when encoding bins. Applying `nextfloat` twice seems to still
156
- # ensure that bins cover data. See comment above.
157
- edgelength = nextfloat (edgeslength_nonadjusted, n_eps)
158
- else
159
- error (" Invalid ϵ for binning of a vector" )
160
- end
161
-
162
- RectangularBinEncoding (b, mini, edgelength)
163
- end
164
-
165
- # #################################################################
166
- # Encoding bins using a fixed (user-specified) grid
167
- # #################################################################
168
- function RectangularBinEncoding (:: AbstractVector{<:Real} ,
169
- b:: FixedRectangularBinning{E} ; n_eps = 2 ) where E
170
-
171
- # This function always returns numbers and is type stable
172
- ϵmin, ϵmax = b. ϵmin, b. ϵmax
173
- mini = ϵmin
174
- if ϵmin isa AbstractFloat && ϵmax isa AbstractFloat
175
- edgelength_nonadjusted = (ϵmax - ϵmin) / b. N
176
- edgelength = nextfloat (edgelength_nonadjusted, n_eps)
177
- else
178
- error (" Invalid ϵmin or ϵmax for binning of a vector" )
179
- end
180
-
181
- RectangularBinEncoding (b, mini, edgelength)
182
- end
183
-
184
- function RectangularBinEncoding (:: AbstractDataset{D, T} ,
185
- b:: FixedRectangularBinning{E} , n_eps = 2 ) where {D, T, E}
144
+ # fixed grid
145
+ function RectangularBinEncoding (x, b:: FixedRectangularBinning{E} ; n_eps = 2 ) where {E}
146
+ D = dimension (x)
147
+ T = eltype (x)
148
+ D ≠ length (E) && error (" Dimension of data and fixed rectangular binning don't match!" )
186
149
# This function always returns static vectors and is type stable
187
150
ϵmin, ϵmax = b. ϵmin, b. ϵmax
188
- if E <: Float64
189
- mini = SVector {D, Float64 } (repeat ([ϵmin], D))
190
- maxi = SVector {D, Float64 } (repeat ([ϵmax], D))
151
+ if E <: Real
152
+ mini = SVector {D, T } (repeat ([ϵmin], D))
153
+ maxi = SVector {D, T } (repeat ([ϵmax], D))
191
154
elseif E <: NTuple{D}
192
- mini = SVector {D, Float64 } (ϵmin)
193
- maxi = SVector {D, Float64 } (ϵmax)
155
+ mini = SVector {D, T } (ϵmin)
156
+ maxi = SVector {D, T } (ϵmax)
194
157
else
195
158
error (" Invalid ϵmin or ϵmax for binning of a dataset" )
196
159
end
197
-
198
160
edgelengths_nonadjusted = @. (maxi .- mini) / b. N
199
161
edgelengths = nextfloat .(edgelengths_nonadjusted, n_eps)
200
-
201
162
RectangularBinEncoding (b, mini, edgelengths)
202
163
end
164
+
203
165
# This version exists if the given `ϵ`s are already tuples.
204
166
# Then, the dataset doesn't need to be provided.
205
- function RectangularBinEncoding (b:: FixedRectangularBinning{<:NTuple} , n_eps = 2 )
206
- ϵmin, ϵmax = b. ϵmin, b. ϵmax
207
- D = length (ϵmin)
208
- mini = SVector {D, Float64} (ϵmin)
209
- maxi = SVector {D, Float64} (ϵmax)
210
- edgelengths_nonadjusted = @. (maxi .- mini) / b. N
211
- edgelengths = nextfloat .(edgelengths_nonadjusted, n_eps)
212
- RectangularBinEncoding (b, mini, edgelengths)
167
+ function RectangularBinEncoding (b:: FixedRectangularBinning{<:NTuple} ; n_eps = 2 )
168
+ D = length (E)
169
+ return RectangularBinEncoding (Dataset {D,Float64} (), b; n_eps)
213
170
end
214
171
215
172
# #################################################################
0 commit comments