# scipy.cluster.hierarchy.optimal_leaf_ordering

scipy.cluster.hierarchy.optimal_leaf_ordering(Z, y, metric='euclidean')

  Given a linkage matrix Z and distance, reorder the cut tree.

  Parameters:
    Z ndarray

      The hierarchical clustering encoded as a linkage matrix. See `linkage` for more information on the return structure and algorithm.

    y ndarray

      The condensed distance matrix from which Z was generated. Alternatively, a collection of m observation vectors in n dimensions may be passed as an m by n array.

    metric str or function, optional

      The distance metric to use in the case that y is a collection of observation vectors; ignored otherwise. See the `pdist` function for a list of valid distance metrics. A custom distance function can also be used.

  Returns:
    Z_ordered ndarray

      A copy of the linkage matrix Z, reordered to minimize the distance between adjacent leaves.

  Examples

      >>> import numpy as np
      >>> from scipy.cluster import hierarchy
      >>> rng = np.random.default_rng()
      >>> X = rng.standard_normal((10, 10))
      >>> Z = hierarchy.ward(X)
      >>> hierarchy.leaves_list(Z)
      array([0, 3, 1, 9, 2, 5, 7, 4, 6, 8], dtype=int32)
      >>> hierarchy.leaves_list(hierarchy.optimal_leaf_ordering(Z, X))
      array([3, 0, 2, 5, 7, 4, 8, 6, 9, 1], dtype=int32)