Source code for bob.measure.load

#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# Mon 23 May 2011 16:23:05 CEST

"""A set of utilities to load score files with different formats.

import logging

import numpy

LOGGER = logging.getLogger("bob.measure")

[docs]def split(filename): """split(filename) -> negatives, positives Loads the scores from the given file and splits them into positive and negative arrays. The file must be a two columns file where the first column contains -1 or 1 (for negative or positive respectively) and the second the corresponding scores. Parameters ---------- filename: :py:class:`str`: The name of the file containing the scores. Returns ------- negatives: 1D :py:class:`numpy.ndarray` of type float This array contains the list of negative scores positives: 1D :py:class:`numpy.ndarray` of type float This array contains the list of positive scores """ try: columns = numpy.loadtxt(filename) neg_pos = columns[:, 0] scores = columns[:, 1] except Exception: LOGGER.error( """Cannot read {}. This file must be a two columns file with the first column containing -1 or 1 (i.e. negative or positive) and the second the scores (float).""".format( filename ) ) raise positives = neg_pos == 1 return (scores[~positives], scores[positives])
[docs]def split_files(filenames): """split_files Parse a list of files using :py:func:`split` Parameters ---------- filenames : :any:`list`: A list of file paths Returns ------- :any:`list`: A list of tuples, where each tuple contains the ``negative`` and ``positive`` scores for one probe of the database. Both ``negatives`` and ``positives`` can be either an 1D :py:class:`numpy.ndarray` of type ``float``, or ``None``. """ if filenames is None: return None res = [] for file_path in filenames: try: res.append(split(file_path)) except Exception: raise return res