optimal_leaf_ordering#
- scipy.cluster.hierarchy.optimal_leaf_ordering(Z, y, metric='euclidean')[source]#
- Given a linkage matrix Z and distance, reorder the cut tree. - Parameters:
- Zndarray
- The hierarchical clustering encoded as a linkage matrix. See - linkagefor more information on the return structure and algorithm.
- yndarray
- 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. 
- metricstr or function, optional
- The distance metric to use in the case that y is a collection of observation vectors; ignored otherwise. See the - pdistfunction for a list of valid distance metrics. A custom distance function can also be used.
 
- Returns:
- Z_orderedndarray
- A copy of the linkage matrix Z, reordered to minimize the distance between adjacent leaves. 
 
 - Notes - optimal_leaf_orderinghas 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=1and 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 - >>> 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)