Source code for pbxplore.analysis.neq

#! /usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function, absolute_import

# Standard modules
import math

# Third-party module
import numpy

# Local module
from . import utils


def _neq_per_residue(row_freq):
    """
    Compute the Neq of a vector of frequencies coresponding to one residue.
    The vector is a row of the frequency matrix.
    This function is intended to be called from the `numpy.apply_along_axis` function.

    Parameters
    ----------
    row_freq : 1D numpy array
        vector of frequencies

    Return
    ------
        The value of the Neq
    """

    H = sum([math.log(freq)*freq for freq in row_freq if freq != 0])

    return math.exp(-H)


[docs]def compute_neq(count_mat): """ Compute the Neq for each residue from an occurence matrix. Parameters ---------- count_mat : numpy array an occurence matrix returned by `count_matrix`. Returns ------- neq_array : numpy array a 1D array containing the neq values """ # get the frequency matrix freq = utils.compute_freq_matrix(count_mat) # Compute neq neq_array = numpy.apply_along_axis(_neq_per_residue, 1, freq) return neq_array