Exemplo n.º 1
0
    def sp_subvector_error(self, radius, sp_dimensions, sp_subdimensions=1):
        """Estimate of representational error of a subvector of a semantic
        pointer (unit vector).

        Requires Scipy.

        Paramaters
        ----------
        radius : float or ndarray
            Radius of the representing ensemble.
        sp_dimensions : int
            Dimensionality of the complete semantic pointer/unit vector.
        sp_subdimensions : int, optional
            Dimensionality of the subvector represented by some ensemble.

        Returns
        -------
        Error estimates for representing a subvector with `subdimensions`
        dimensions of a `dimensions` dimensional unit vector with an ensemble
        initialized with of `radius`.
        """
        dist = SubvectorLength(sp_dimensions, sp_subdimensions)
        in_range = self._sp_subvector_error_in_range(radius, sp_subdimensions)
        out_of_range = self._sp_subvector_error_out_of_range(
            radius, sp_dimensions, sp_subdimensions)
        return dist.cdf(radius) * in_range + (
            1.0 - dist.cdf(radius)) * out_of_range
Exemplo n.º 2
0
def _sp_subvector_error_out_of_range(radius, dimensions, subdimensions):
    dist = SubvectorLength(dimensions, subdimensions)
    sq_r = radius * radius

    normalization = 1.0 - dist.cdf(radius)
    b = (dimensions - subdimensions) / 2.0
    aligned_integral = beta(subdimensions / 2.0 + 1.0, b) * (1.0 - betainc(
        subdimensions / 2.0 + 1.0, b, sq_r))
    cross_integral = beta((subdimensions + 1) / 2.0, b) * (1.0 - betainc(
        (subdimensions + 1) / 2.0, b, sq_r))

    numerator = (sq_r * normalization + (
        aligned_integral - 2.0 * radius * cross_integral) / beta(
        subdimensions / 2.0, b))
    with np.errstate(invalid='ignore'):
        return np.where(
            numerator > np.MachAr().eps,
            numerator / normalization, np.zeros_like(normalization))