generalized_procrustes — SHAPESTAT procrustes op

• Data kinds: shapeset → shapeset

• Call: import fullseye as fs; fs.ledger.generalized_procrustes(shapes, max_iter: 'int' = 100, tol: 'float' = 1e-10, scaling: 'bool' = True, reflection: 'bool' = False) (to call the implementation directly, import shapestats; shapestats.generalized_procrustes(shapes, max_iter: 'int' = 100, tol: 'float' = 1e-10, scaling: 'bool' = True, reflection: 'bool' = False); from the registry, opsshapestat.get("generalized_procrustes"))

Usage

Generalised Procrustes analysis (GPA). Brings all individuals into a common frame. → (K, N, 3).

The procedure is the textbook one: take 1 individual as a provisional mean, align everyone, recompute the mean, re-align that mean to the first individual to stop the frame from drifting, and repeat until convergence. Without that last step the mean rotates slowly every time and never reaches tol.

Convergence is judged by how much the mean shape moves (per-point RMS). The iteration count and whether it converged are returned neither by shape_mean nor by this function -- since it is a function returning the group, when you need diagnostics, measure procrustes_distance before and after.

Detailed usage guide

• shape_statistics family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• shapestat_landmark_tour — py -3.11 examples/shapestat_landmark_tour.py

Ops the type connects to (they accept shapeset as input)

shape_mean · shape_pca

Same category (procrustes)

procrustes_fit · procrustes_align · procrustes_distance · shape_mean


*Provenance: shapestats.py — SHAPESTAT operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.