code: def recall(result, reference):
      
      result = numpy.atleast_1d(result.astype(numpy.bool))
      reference = numpy.atleast_1d(reference.astype(numpy.bool))
          
      tp = numpy.count_nonzero(result & reference)
      fn = numpy.count_nonzero(~result & reference)
  
      try:
          recall = tp / float(tp + fn)
      except ZeroDivisionError:
          recall = 0.0
      
      return recall
docs: Recall.
      
      Parameters
      ----------
      result : array_like
          Input data containing objects. Can be any type but will be converted
          into binary: background where 0, object everywhere else.
      reference : array_like
          Input data containing objects. Can be any type but will be converted
          into binary: background where 0, object everywhere else.
      
      Returns
      -------
      recall : float
          The recall between two binary datasets, here mostly binary objects in images,
          which is defined as the fraction of relevant instances that are retrieved. The
          recall is not symmetric.
      
      See also
      --------
      :func:`precision`
      
      Notes
      -----
      Not symmetric. The inverse of the recall is :func:`precision`.
      High recall means that an algorithm returned most of the relevant results.
      
      References
      ----------
      .. [1] http://en.wikipedia.org/wiki/Precision_and_recall
      .. [2] http://en.wikipedia.org/wiki/Confusion_matrix#Table_of_confusion