Skip to content
This repository was archived by the owner on May 21, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/fixedrange.jl
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,26 @@ function fixedrange!(X::AbstractMatrix, lower::Real, upper::Real, xmin::Abstract
lower, upper, xmin, xmax
end

function fixedrange!(X::AbstractMatrix, lower::Real, upper::Real, xmin::AbstractVector, xmax::AbstractVector, ::ObsDim.Last, operate_on::AbstractVector)
fixedrange!(X, lower, upper, xmin, xmax, ObsDim.Constant{2}(), operate_on)
end

function fixedrange!{T,M}(X::AbstractArray{T,M}, lower::Real, upper::Real, xmin::Real, xmax::Real, ::ObsDim.Last, operate_on::AbstractVector)
fixedrange!(X, lower, upper, xmin, xmax, ObsDim.Constant{M}(), operate_on)
end

function fixedrange!(x::AbstractVector; lower=0.0, upper=1.0)
xmin = minimum(x)
xmax = maximum(x)
fixedrange!(x, lower, upper, xmin, xmax)
end

function fixedrange!(x::AbstractVector, lower::Real, upper::Real)
xmin = minimum(x)
xmax = maximum(x)
fixedrange!(x, lower, upper, xmin, xmax)
end

function fixedrange!{M}(x::AbstractVector, lower::Real, upper::Real, xmin::AbstractVector, xmax::AbstractVector, ::ObsDim.Constant{M}, operate_on::AbstractVector)
@assert length(xmin) == length(xmax) == length(operate_on)
xrange = xmax .- xmin
Expand Down
102 changes: 102 additions & 0 deletions test/tst_fixedrangescaler.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,20 @@ D = DataFrame(A=rand(10), B=collect(1:10), C=[hex(x) for x in 11:20])
D_NA = deepcopy(D)
D_NA[1, :A] = NA
@testset "Array" begin
scaler = FixedRangeScaler(X)
XX = transform(X, scaler)
@test mean(XX[:,end]) ≈ 1
@test mean(XX[:,1]) ≈ 0
@test maximum(XX) == 1
@test minimum(XX) == 0

scaler = FixedRangeScaler(X, -2, 2)
XX = transform(X, scaler)
@test mean(XX[:,end]) ≈ 2
@test mean(XX[:,1]) ≈ -2
@test maximum(XX) == 2
@test minimum(XX) == -2

scaler = fit(FixedRangeScaler, X)
XX = transform(X, scaler)
@test mean(XX[:,end]) ≈ 1
Expand Down Expand Up @@ -55,8 +69,70 @@ D_NA[1, :A] = NA
transform!(XX, scaler)
@test mean(minimum(XX[[1,2],:], 2)) ≈ -2
@test mean(maximum(XX[[1,2],:], 2)) ≈ 2

XX = deepcopy(X)
fixedrange!(XX)
@test all(maximum(XX, 2) .== ones(size(XX, 1)))
@test all(minimum(XX, 2) .== zeros(size(XX, 1)))

XX = deepcopy(X)
fixedrange!(XX, ObsDim.Last(), collect(1:size(X,1)))
@test all(maximum(XX, 2) .== ones(size(XX, 1)))
@test all(minimum(XX, 2) .== zeros(size(XX, 1)))

XX = deepcopy(X)
fixedrange!(XX, -2, 2)
@test all(maximum(XX, 2) .== ones(size(XX, 1)) .* 2)
@test all(minimum(XX, 2) .== ones(size(XX, 1)) .* -2)

XX = deepcopy(X)
fixedrange!(XX, 0, 1, ObsDim.First(), collect(1:size(X, 2)))
@test all(maximum(XX, 1) .== ones(size(XX, 2)))
@test all(minimum(XX, 1) .== zeros(size(XX, 2)))

XX = deepcopy(X)
fixedrange!(XX, 0, 1, ObsDim.Last(), collect(1:size(X,1)))
@test all(maximum(XX, 2) .== ones(size(XX, 1)))
@test all(minimum(XX, 2) .== zeros(size(XX, 1)))

XX = deepcopy(X)
fixedrange!(XX, 0, 1, vec(minimum(XX, 2)), vec(maximum(XX, 2)))
@test all(maximum(XX, 2) .== ones(size(XX, 1)))
@test all(minimum(XX, 2) .== zeros(size(XX, 1)))


XX = deepcopy(X)
fixedrange!(XX, 0, 1, vec(minimum(XX, 2)), vec(maximum(XX, 2)), ObsDim.Last(), collect(1:size(XX, 1)))
@test all(maximum(XX, 2) .== ones(size(XX, 1)))
@test all(minimum(XX, 2) .== zeros(size(XX, 1)))

XX = deepcopy(X)
fixedrange!(XX, 0, 1, vec(minimum(XX, 2)), vec(maximum(XX, 2)), ObsDim.Constant{2}(), collect(1:size(XX, 1)))
@test all(maximum(XX, 2) .== ones(size(XX, 1)))
@test all(minimum(XX, 2) .== zeros(size(XX, 1)))

xx = deepcopy(x)
fixedrange!(xx)
@test minimum(xx) == 0
@test maximum(xx) == 1

xx = deepcopy(x)
fixedrange!(xx, -1, 1)
@test minimum(xx) == -1
@test maximum(xx) == 1

xx = deepcopy(x)
xmin = minimum(x, 2) .- 1
xmax = maximum(x, 2)

xx = deepcopy(x)
fixedrange!(xx, -1, 1, xmin, xmax, ObsDim.First(), collect(1:length(x)))
@test all(minimum(xx, 2) .== ones(length(x)))
@test all(maximum(xx, 2) .== ones(length(x)))

end


@testset "DataFrame" begin
scaler = fit(FixedRangeScaler, D)
DD = transform(D, scaler)
Expand Down Expand Up @@ -105,4 +181,30 @@ end
@test maximum(DD[:A]) == 1
@test minimum(DD[:B]) == -1
@test maximum(DD[:B]) == 1

DD = deepcopy(D)
fixedrange!(DD)
@test minimum(DD[:A]) == 0
@test maximum(DD[:A]) == 1
@test minimum(DD[:B]) == 0
@test maximum(DD[:B]) == 1

DD = deepcopy(D)
fixedrange!(DD, -1, 1)
@test minimum(DD[:A]) == -1
@test maximum(DD[:A]) == 1
@test minimum(DD[:B]) == -1
@test maximum(DD[:B]) == 1

DD = deepcopy(D)
fixedrange!(DD, -1, 1, [:A, :B, :C])
@test minimum(DD[:A]) == -1
@test maximum(DD[:A]) == 1
@test minimum(DD[:B]) == -1
@test maximum(DD[:B]) == 1

DD = deepcopy(D)
fixedrange!(DD, -1, 1, [0,1], [1,10])
@test minimum(DD[:B]) == -1
@test maximum(DD[:B]) == 1
end