Skip to main content
`Ctrl`+`K`
scipy.spatial.distance.

# is_valid_dm

scipy.spatial.distance.is_valid_dm(D, tol=0.0, throw=False, name='D', warning=False)

  Return True if input array is a valid distance matrix.

  Distance matrices must be 2-dimensional numpy arrays. They must have a zero-diagonal, and they must be symmetric.

  Parameters:
    D array_like

      The candidate object to test for validity.

    tol float, optional

      The distance matrix should be symmetric. tol is the maximum difference between entries `ij` and `ji` for the distance metric to be considered symmetric.

    throw bool, optional

      An exception is thrown if the distance matrix passed is not valid.

    name str, optional

      The name of the variable to checked. This is useful if throw is set to True so the offending variable can be identified in the exception message when an exception is thrown.

    warning bool, optional

      Instead of throwing an exception, a warning message is raised.

  Returns:
    valid bool

      True if the variable D passed is a valid distance matrix.

  Notes

  Small numerical differences in D and D.T and non-zeroness of the diagonal are ignored if they are within the tolerance specified by tol.

  Examples

      >>> import numpy as np
      >>> from scipy.spatial.distance import is_valid_dm

  This matrix is a valid distance matrix.

      >>> d = np.array([[0.0, 1.1, 1.2, 1.3],
      ...               [1.1, 0.0, 1.0, 1.4],
      ...               [1.2, 1.0, 0.0, 1.5],
      ...               [1.3, 1.4, 1.5, 0.0]])
      >>> is_valid_dm(d)
      True

  In the following examples, the input is not a valid distance matrix.

  Not square:

      >>> is_valid_dm([[0, 2, 2], [2, 0, 2]])
      False

  Nonzero diagonal element:

      >>> is_valid_dm([[0, 1, 1], [1, 2, 3], [1, 3, 0]])
      False

  Not symmetric:

      >>> is_valid_dm([[0, 1, 3], [2, 0, 1], [3, 1, 0]])
      False