komm.DiscreteMemorylessSource
Discrete memoryless source (DMS). It is defined by an alphabet $\mathcal{X}$ and a probability mass function (pmf) $p_X$. Here, for simplicity, the alphabet is always taken as $\mathcal{X} = [0 : |\mathcal{X}|)$. The pmf $p_X$ gives the probability of the source emitting the symbol $X = x$.
Parameters:
-
pmf
(ArrayLike | int
) –Either the source pmf $p_X$, in which case the element at position $x \in \mathcal{X}$ must be equal to $p_X(x)$, or an integer $n \geq 1$, in which case a uniform distribution over $n$ symbols is used.
Examples:
>>> komm.DiscreteMemorylessSource([1/2, 1/4, 1/8, 1/8])
DiscreteMemorylessSource(pmf=[0.5, 0.25, 0.125, 0.125])
>>> komm.DiscreteMemorylessSource(4)
DiscreteMemorylessSource(pmf=[0.25, 0.25, 0.25, 0.25])
cardinality
int
cached
property
The cardinality $|\mathcal{X}|$ of the source alphabet.
entropy()
Returns the source entropy $\mathrm{H}(X)$. See komm.entropy
for more details.
Parameters:
-
base
(LogBase
) –See
komm.entropy
. The default value is $2.0$.
Examples:
>>> dms = komm.DiscreteMemorylessSource([1/2, 1/4, 1/8, 1/8])
>>> dms.entropy()
np.float64(1.75)
>>> dms.entropy(base=4)
np.float64(0.875)
__call__()
Returns random samples from the source.
Parameters:
-
shape
(int | tuple[int, ...]
) –The shape of the output array. If
shape
is an integer, the output array will have shape(shape,)
. The default value is()
, which returns a single sample.
Returns:
-
NDArray[integer]
–An array of shape
shape
with random samples from the source.
Examples:
>>> dms = komm.DiscreteMemorylessSource([0.5, 0.4, 0.1])
>>> dms()
array(1)
>>> dms(10)
array([0, 1, 1, 0, 2, 1, 1, 0, 0, 0])
>>> dms((2, 5))
array([[2, 1, 1, 0, 0],
[1, 0, 1, 1, 1]])