This simple package defines a WeightedMatrix
, a struct with vector of weights corresponding to the columns of a matrix. By default the weights(x)
add up to 1. The array(x)
values may have a box constraint:
julia> Weighted(randn(3,5))
Weighted 3×5 Array{Float64,2}, of unclamped θ:
-0.264476 -1.83297 0.0669732 -0.340433 -1.87672
0.0461253 -0.330401 0.0215189 2.3129 -1.78839
0.461376 0.00486523 -0.819182 -1.43221 -0.855756
with normalised weights p(θ), 5-element Array{Float64,1}:
0.2 0.2 0.2 0.2 0.2
julia> Weighted(rand(2,4), ones(4), 0, 1)
Weighted 2×4 Array{Float64,2}, clamped 0.0 ≦ θ ≦ 1.0:
0.7842 0.257179 0.483388 0.780996
0.138967 0.748165 0.387104 0.167825
with normalised weights p(θ), 4-element Array{Float64,1}:
0.25 0.25 0.25 0.25
These examples are roughly wrandn(3,5)
and wrand(2,4)
, there are also sub-random sobol(3,7)
and regular wgrid(2, 0:0.1:1)
.
Their values are mutable, clamp!(x)
will enforce the box constraint, and normalise!(x)
(with an s) the weights.
They are not subtypes of AbstractArray
, but many functions will work.
For instance x[1:2, :]
keeps only the first two rows (and the weights),
hcat(x,y)
will concatenate the weights,
and mapslices(f,x)
will act with f
on columns & then restore weights.
sort(x)
re-arranges columns to order by the weights, sortcols(x)
orders by the array instead,
unique(x)
will accumulate the weights of identical columns.
A few functions like log(x)
and tanh(x)
act element-wise but update the box constraints appropriately.
Most of this will work for any N-dimensional Array, not just a Matrix. The weights then belong to the last dimension.
Plot recipes are defined, in which the area of points indicating weight. The example shown is a grid plus a bivariate sub-random normal distribution:
julia> using Plots
julia> plot(wgrid(2, -5:5), m=:+)
julia> plot!(soboln(2, 2000), m=:diamond, c=:red)
With more than three rows e.g. plot(wrandn(4,50))
, it will plot the first two principal components (and attempt to scale these correctly).
There is a function pplot(x)
which saves the PCA function (see help for wPCA(x)
) in a global variable, so that pplot!(t)
can add more points on the same axes.