Random Array Sampling

🔗 Store Page

This plugin provides various blueprint nodes for generating random samples, possibly weighted, from a source array. Arrays can be of any type, with relative weights attached to favour sampling some items over others. A C++ template function is also provided for use in C++ source code.

Blueprint Nodes

Random Sample

../_images/random_sample.png

Get a random sample of Count items from the Input Array. If there are fewer than Count items in the input array, the function will return all items in the input array in a random order.

Random Sample From Stream

../_images/random_sample_from_stream.png

Like Random Sample but using a custom random stream.

Weighted Sample

../_images/weighted_sample.png

Get a random sample of Count items from the Input Array. Each item in the Input Array has a weight corresponding to the bias towards sampling that item relative to all the other item weights. There must be at least as many weights in the Weights array as there are items in the Input Array.

Weighted Sample From Stream

../_images/weighted_sample_from_stream.png

Like Weighted Sample but using a custom random stream.

Weighted Shuffle

../_images/weighted_shuffle.png

Shuffle the Input Array, returning the entire contents in a different order. Each item in the Input Array has a weight corresponding to the bias towards sampling that item relative to all the other item weights. There must be at least as many weights in the Weights array as there are items in the Input Array.

The result of this function is similar to calling Weighted Sample with the Count equal to the number of items in the Input Array.

Weighted Shuffle From Stream

../_images/weighted_shuffle_from_stream.png

Like Weighted Shuffle but using a custom random stream.

C++ Function

  • Include: “RandomSample.h”

  • Namespace: RandomShuffles

template<typename It, typename Wt, typename Out, typename Rand>
Out RandomSample(It begin, It end, Wt wbegin, Out out, std::size_t count, Rand randFunc)

Randomly select count items from the sequence [begin, end), using relative weights in the sequence starting at wbegin. Samples will be written in sequence to out. The given random number generator, randFunc, will be used as the source of randomness.

Template Parameters

  • It An input iterator type.

  • Wt An input iterator type with a value type which is convertible to float.

  • Out An output iterator type for which the statement *out = *in is well-formed, where out is of type Out and in is of type It.

  • Rand A callable type with the signature Rand(float, float).

Parameters

  • begin An input iterator denoting the first item in the sequence to sample from.

  • end An input iterator one past the end of the sequence to sample from.

  • wbegin An input iterator denoting the first weight in the sequence of relative weights.

  • out An output iterator denoting the position in the output sequence to start writing to.

  • count The number of items to sample.

  • randFunc A random number generator function.

Returns

One past the end of the last output element written to the output sequence, or out if no elements were written.

Notes

The weight sequence must contain at least as many elements as the input sequence.

The output sequence must be able to write at min(count, std::distance(begin, end)) elements.

If count == 0 or begin == end, no elements are written.

The randFunc parameter accepts a minimum and maximum value and should return a random number between these values.