On Thu, 13 Jun 2019 at 16:35, Alex Herbert <alex.d.herb...@gmail.com> wrote:
>
>
> On 13/06/2019 15:59, Gary Gregory wrote:
> > Now that RNG is up and going, it seems odd to still have:
> >
> > org.apache.commons.lang3.ArrayUtils.shuffle(double[], Random)
> >
> > Should we deprecate these APIs in favor of Commons RNG and if so which RNG
> > APIs?
> >
> > Gary
> Shuffling is in the commons-rng-sampling component.
>
> Shuffling for int[] primitive arrays is in the PermutationSampler [1].
>
> Shuffling for a List<T> is in the ListSampler [2].
>
> Currently there are methods to shuffle the entire length, or part of the
> length starting from a position and shuffling to the start or end of the
> array / list.
>
> There is no method for:
>
> - Shuffling a subsequence within the array / list defined by either
> start and length or start and end.
>
> - Shuffling an array T[]
>
> - Shuffling primitive arrays other than int[] (This requires a bit of
> work [3])
>
>
> [Lang] ArrayUtils only shuffles the full array but supports all
> primitive array types and Object[]. It does not support a shuffle of T[].
>
> So there is only partial overlap between the libraries. There is not a
> like for like swap to deprecate ArrayUtils methods in favour of Commons
> RNG methods.
>
>
> I think it is quite a common use case to want to shuffle full length
> arrays. I'm not sure about sub-sequence shuffles but one is a super-set
> of the other.
>
> To deprecate ArrayUtils shuffle methods would require a new class in RNG
> to support this for all primitives and a generic type T following this
> prototype:
>
> ArrayUtils.shuffle(UniformRandomProvider rng, double[] data)
> ArrayUtils.shuffle(UniformRandomProvider rng, double[] data, int start,
> int length)
>
>
> I'm not opposed to adding the methods to Commons RNG. Either in the
> current sampling module or perhaps a new commons-rng-utils module
> instead since a shuffle is not really a sample unless you use a
> subsequence from the shuffled array.

Rather than shuffle etc in place, how about various
iterators/selectors to return entries in randomised order?
[Or does that already exist?]

>
> Alex
>
>
> [1]
> http://commons.apache.org/proper/commons-rng/commons-rng-sampling/javadocs/api-1.2/org/apache/commons/rng/sampling/PermutationSampler.html
>
>
> [2]
> http://commons.apache.org/proper/commons-rng/commons-rng-sampling/javadocs/api-1.2/org/apache/commons/rng/sampling/ListSampler.html
>
> [3] Supporting all the primitive avoids the currently usage to shuffle a
> non-integer array which requires:
>
> - Clone the input array
> - Shuffle a newly allocated int[] of ascending indices
> - Use the shuffled indices to copy data from the clone back to the input
> array
>
> This has unnecessary allocation overhead.
>
>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to