RAND
Download Flojoy Studio to try this app
  
 Generate a random number or Vector of random numbers, depending on the distribution selected. Inputs
------
default : DataContainer
    unused in this node  Params:    distribution : select  the distribution over the random samples   size : int  the size of the output. =1 outputs Scalar, >1 outputs Vector   lower_bound : float  the lower bound of the output interval   upper_bound : float  the upper bound of the output interval   normal_mean : float  the mean or "center" of the normal distribution   normal_standard_deviation : float  the spread or "width" of the normal distribution   poisson_events : float  the expected number of events occurring in a fixed time-interval when distribution is poisson     Returns:    out : Scalar|Vector  Vector if size > 1
v: the random samples
Scalar if size = 1
c: the random number    
Python Code
import random
from typing import Literal, Optional
import numpy as np
from flojoy import DataContainer, Scalar, Vector, display, flojoy
@flojoy
def RAND(
    default: Optional[DataContainer] = None,
    distribution: Literal["normal", "uniform", "poisson"] = "normal",
    size: int = 1000,
    lower_bound: float = 0,
    upper_bound: float = 1,
    normal_mean: float = 0,
    normal_standard_deviation: float = 1,
    poisson_events: float = 1,
) -> Vector | Scalar:
    """Generate a random number or Vector of random numbers, depending on the distribution selected.
    Inputs
    ------
    default : DataContainer
        unused in this node
    Parameters
    ----------
    distribution : select
        the distribution over the random samples
    size : int
        the size of the output. =1 outputs Scalar, >1 outputs Vector
    lower_bound : float
        the lower bound of the output interval
    upper_bound : float
        the upper bound of the output interval
    normal_mean : float
        the mean or "center" of the normal distribution
    normal_standard_deviation : float
        the spread or "width" of the normal distribution
    poisson_events : float
        the expected number of events occurring in a fixed time-interval when distribution is poisson
    Returns
    -------
    Scalar|Vector
        Vector if size > 1
        v: the random samples
        Scalar if size = 1
        c: the random number
    """
    assert size >= 1, "Size must be greater than or equal to than 1"
    if upper_bound < lower_bound:
        upper_bound, lower_bound = lower_bound, upper_bound
    seed = random.randint(1, 10000)
    my_generator = np.random.default_rng(seed)
    match distribution:
        case "uniform":
            y = my_generator.uniform(low=lower_bound, high=upper_bound, size=size)
        case "normal":
            y = my_generator.normal(
                loc=normal_mean, scale=normal_standard_deviation, size=size
            )
        case "poisson":
            y = my_generator.poisson(lam=poisson_events, size=size)
    if size > 1:
        return Vector(v=y)
    return Scalar(c=float(y[0]))
@display
def OVERLOAD(size, lower_bound, upper_bound, distribution="uniform") -> None:
    return None
@display
def OVERLOAD(  # noqa: F811
    size, normal_mean, normal_standard_deviation, distribution="normal"
) -> None:
    return None
@display
def OVERLOAD(size, poisson_events, distribution="poisson") -> None:  # noqa: F811
    return None
Example App
Having problems with this example app? Join our Discord community and we will help you out!
In this example, the RAND node generates random values following a normal (or Gaussian) distribution.
The distribution is then plotted with HISTOGRAM and as expected of a Gaussian distribution,
the output of the HISTOGRAM node converges towards a bell curve.
There’s also a RAND node with the size parameter set to 1, in which case a single number would be generated, which is displayed by BIG_NUMBER in this example.