# Source code for neurokit2.complexity.entropy_shannon_joint

```import numpy as np
import scipy.stats

from .entropy_shannon import _entropy_freq

[docs]
def entropy_shannon_joint(x, y, base=2):
"""**Shannon's Joint Entropy**

The joint entropy measures how much entropy is contained in a joint system of two random
variables.

Parameters
----------
x : Union[list, np.array, pd.Series]
A :func:`symbolic <complexity_symbolize>` sequence in the form of a vector of values.
y : Union[list, np.array, pd.Series]
Another symbolic sequence with the same values.
base: float
The logarithmic base to use, defaults to ``2``. Note that ``scipy.stats.entropy()``
uses ``np.e`` as default (the natural logarithm).

Returns
--------
float
The Shannon joint entropy.
dict
A dictionary containing additional information regarding the parameters used
to compute Shannon entropy.

--------
entropy_shannon

Examples
----------
.. ipython:: python

import neurokit2 as nk

x = ["A", "A", "A", "B", "A", "B"]
y = ["A", "B", "A", "A", "A", "A"]

jen, _ = nk.entropy_shannon_joint(x, y)
jen

"""
# Get frequencies
labels_x, freq_x = _entropy_freq(x)
labels_y, freq_y = _entropy_freq(y)

assert np.all(labels_y == labels_y), "The labels of x and y are not the same."

return scipy.stats.entropy(freq_x, freq_y, base=base), {"Base": base}

```