to_tree#
- scipy.cluster.hierarchy.to_tree(Z, rd=False)[source]#
Convert a linkage matrix into an easy-to-use tree object.
The reference to the root
ClusterNode
object is returned (by default).Each
ClusterNode
object has aleft
,right
,dist
,id
, andcount
attribute. The left and right attributes point to ClusterNode objects that were combined to generate the cluster. If both are None then theClusterNode
object is a leaf node, its count must be 1, and its distance is meaningless but set to 0.Note: This function is provided for the convenience of the library user. ClusterNodes are not used as input to any of the functions in this library.
- Parameters:
- Zndarray
The linkage matrix in proper form (see the
linkage
function documentation).- rdbool, optional
When False (default), a reference to the root
ClusterNode
object is returned. Otherwise, a tuple(r, d)
is returned.r
is a reference to the root node whiled
is a list ofClusterNode
objects - one per original entry in the linkage matrix plus entries for all clustering steps. If a cluster id is less than the number of samplesn
in the data that the linkage matrix describes, then it corresponds to a singleton cluster (leaf node). Seelinkage
for more information on the assignment of cluster ids to clusters.
- Returns:
- treeClusterNode or tuple (ClusterNode, list of ClusterNode)
If
rd
is False, aClusterNode
. Ifrd
is True, a list of length2*n - 1
, withn
the number of samples. See the description of rd above for more details.
See also
Notes
to_tree
has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variableSCIPY_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
⚠️ no JIT
⚠️ no JIT
Dask
⚠️ computes graph
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.random((5, 2)) >>> Z = hierarchy.linkage(x) >>> hierarchy.to_tree(Z) <scipy.cluster.hierarchy.ClusterNode object at ... >>> rootnode, nodelist = hierarchy.to_tree(Z, rd=True) >>> rootnode <scipy.cluster.hierarchy.ClusterNode object at ... >>> len(nodelist) 9