rand_distr

Struct Zipf

Source
pub struct Zipf<F>{ /* private fields */ }
Expand description

The Zipf (Zipfian) distribution Zipf(n, s).

The samples follow Zipf’s law: The frequency of each sample from a finite set of size n is inversely proportional to a power of its frequency rank (with exponent s).

For large n, this converges to the Zeta distribution.

For s = 0, this becomes a uniform distribution.

§Plot

The following plot illustrates the Zipf distribution for n = 10 and various values of s.

Zipf distribution

§Example

use rand::prelude::*;
use rand_distr::Zipf;

let val: f64 = rand::rng().sample(Zipf::new(10.0, 1.5).unwrap());
println!("{}", val);

§Integer vs FP return type

This implementation uses floating-point (FP) logic internally. It may be expected that the samples are no greater than n, thus it is reasonable to cast generated samples to any integer type which can also represent n (e.g. distr.sample(&mut rng) as u64).

§Implementation details

Implemented via rejection sampling, due to Jason Crease1.

Implementations§

Source§

impl<F> Zipf<F>

Source

pub fn new(n: F, s: F) -> Result<Zipf<F>, Error>

Construct a new Zipf distribution for a set with n elements and a frequency rank exponent s.

The parameter n is typically integral, however we use type

F: [Float]
in order to permit very large values

and since our implementation requires a floating-point type.

Trait Implementations§

Source§

impl<F> Clone for Zipf<F>

Source§

fn clone(&self) -> Zipf<F>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<F> Debug for Zipf<F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<F> Distribution<F> for Zipf<F>

Source§

fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> F

Generate a random value of T, using rng as the source of randomness.
Source§

fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>
where R: Rng, Self: Sized,

Create an iterator that generates random values of T, using rng as the source of randomness. Read more
Source§

fn map<F, S>(self, func: F) -> DistMap<Self, F, T, S>
where F: Fn(T) -> S, Self: Sized,

Create a distribution of values of ‘S’ by mapping the output of Self through the closure F Read more
Source§

impl<F> PartialEq for Zipf<F>

Source§

fn eq(&self, other: &Zipf<F>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<F> Copy for Zipf<F>

Source§

impl<F> StructuralPartialEq for Zipf<F>

Auto Trait Implementations§

§

impl<F> Freeze for Zipf<F>
where F: Freeze,

§

impl<F> RefUnwindSafe for Zipf<F>
where F: RefUnwindSafe,

§

impl<F> Send for Zipf<F>
where F: Send,

§

impl<F> Sync for Zipf<F>
where F: Sync,

§

impl<F> Unpin for Zipf<F>
where F: Unpin,

§

impl<F> UnwindSafe for Zipf<F>
where F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V