Skip to main content
`Ctrl`+`K`
scipy.cluster.hierarchy.

# inconsistent

scipy.cluster.hierarchy.inconsistent(Z, d=2)

  Calculate inconsistency statistics on a linkage matrix.

  Parameters:
    Zndarray

      The \((n-1)\) by 4 matrix encoding the linkage (hierarchical clustering). See `linkage` documentation for more information on its form.

    dint, optional

      The number of links up to d levels below each non-singleton cluster.

  Returns:
    Rndarray

      A \((n-1)\) by 4 matrix where the `i`’th row contains the link statistics for the non-singleton cluster `i`. The link statistics are computed over the link heights for links \(d\) levels below the cluster `i`. `R[i,0]` and `R[i,1]` are the mean and standard deviation of the link heights, respectively; `R[i,2]` is the number of links included in the calculation; and `R[i,3]` is the inconsistency coefficient,

      \[\frac{\mathtt{Z[i,2]} - \mathtt{R[i,0]}} {R[i,1]}\]

  Notes

  This function behaves similarly to the MATLAB(TM) `inconsistent` function.

  `inconsistent` has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable `SCIPY_ARRAY_API=1` and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

  Library | CPU | GPU
  --- | --- | ---
  NumPy | ✅ | n/a
  CuPy | n/a | ⛔
  PyTorch | ✅ | ⛔
  JAX | ✅ | ⛔
  Dask | ⚠️ merges chunks | n/a

  See Support for the array API standard for more information.

  Examples

      >>> from scipy.cluster.hierarchy import inconsistent, linkage
      >>> from matplotlib import pyplot as plt
      >>> X = [[i] for i in [2, 8, 0, 4, 1, 9, 9, 0]]
      >>> Z = linkage(X, 'ward')
      >>> print(Z)
      [[ 5.          6.          0.          2.        ]
       [ 2.          7.          0.          2.        ]
       [ 0.          4.          1.          2.        ]
       [ 1.          8.          1.15470054  3.        ]
       [ 9.         10.          2.12132034  4.        ]
       [ 3.         12.          4.11096096  5.        ]
       [11.         13.         14.07183949  8.        ]]
      >>> inconsistent(Z)
      array([[ 0.        ,  0.        ,  1.        ,  0.        ],
             [ 0.        ,  0.        ,  1.        ,  0.        ],
             [ 1.        ,  0.        ,  1.        ,  0.        ],
             [ 0.57735027,  0.81649658,  2.        ,  0.70710678],
             [ 1.04044011,  1.06123822,  3.        ,  1.01850858],
             [ 3.11614065,  1.40688837,  2.        ,  0.70710678],
             [ 6.44583366,  6.76770586,  3.        ,  1.12682288]])