scipy.cluster.hierarchy.

to_mlab_linkage#

scipy.cluster.hierarchy.to_mlab_linkage(Z)[source] #

Convert a linkage matrix to a MATLAB(TM) compatible one.

Converts a linkage matrix Z generated by the linkage function of this module to a MATLAB(TM) compatible one. The return linkage matrix has the last column removed and the cluster indices are converted to 1..N indexing.

Parameters:
Zndarray

A linkage matrix generated by scipy.cluster.hierarchy.

Returns:
to_mlab_linkagendarray

A linkage matrix compatible with MATLAB(TM)’s hierarchical clustering functions.

The return linkage matrix has the last column removed and the cluster indices are converted to 1..N indexing.

See also

linkage

for a description of what a linkage matrix is.

from_mlab_linkage

transform from Matlab to SciPy format.

Notes

to_mlab_linkage 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

n/a

See Support for the array API standard for more information.

Examples

>>> fromscipy.cluster.hierarchyimport ward, to_mlab_linkage
>>> fromscipy.spatial.distanceimport pdist
>>> X = [[0, 0], [0, 1], [1, 0],
...  [0, 4], [0, 3], [1, 4],
...  [4, 0], [3, 0], [4, 1],
...  [4, 4], [3, 4], [4, 3]]
>>> Z = ward(pdist(X))
>>> Z
array([[ 0. , 1. , 1. , 2. ],
 [ 3. , 4. , 1. , 2. ],
 [ 6. , 7. , 1. , 2. ],
 [ 9. , 10. , 1. , 2. ],
 [ 2. , 12. , 1.29099445, 3. ],
 [ 5. , 13. , 1.29099445, 3. ],
 [ 8. , 14. , 1.29099445, 3. ],
 [11. , 15. , 1.29099445, 3. ],
 [16. , 17. , 5.77350269, 6. ],
 [18. , 19. , 5.77350269, 6. ],
 [20. , 21. , 8.16496581, 12. ]])

After a linkage matrix Z has been created, we can use scipy.cluster.hierarchy.to_mlab_linkage to convert it into MATLAB format:

>>> mZ = to_mlab_linkage(Z)
>>> mZ
array([[ 1. , 2. , 1. ],
 [ 4. , 5. , 1. ],
 [ 7. , 8. , 1. ],
 [ 10. , 11. , 1. ],
 [ 3. , 13. , 1.29099445],
 [ 6. , 14. , 1.29099445],
 [ 9. , 15. , 1.29099445],
 [ 12. , 16. , 1.29099445],
 [ 17. , 18. , 5.77350269],
 [ 19. , 20. , 5.77350269],
 [ 21. , 22. , 8.16496581]])

The new linkage matrix mZ uses 1-indexing for all the clusters (instead of 0-indexing). Also, the last column of the original linkage matrix has been dropped.

On this page