[matplotlib/matplotlib] [PERF] Replace np.column_stack with np.vstack().T (PR #31132)
DRANK
This PR addresses issue #31130 by replacing all occurrences of `np.column_stack` with `np.vstack().T` in the non-test codebase for better performance. ### Performance Improvement According to benchmarks in issue #31130: - With broadcast: `np.column_stack` → 36.47 µs, `np.vstack().T` → 27.67 µs (24% faster) - Without broadcast: `np.column_stack` → 20.63 µs, `np.vstack().T` → 13.18 µs (36% faster) The improvement comes from `np.vstack().T` doing contiguous memory copies and returning a view, whereas `np.column_stack` has to interleave elements in memory. ### Changes - Modified 20 files across the codebase - Replaced 52 occurrences of `np.column_stack` with `np.vstack().T` - Changes are limited to production code (not tests) - No functional changes - this is a pure performance optimization ### Files Modified - `lib/matplotlib/axes/_axes.py` - `lib/matplotlib/axes/_base.py` - `lib/matplotlib/cbook.py` - `lib/matplotlib/collections.py` - `lib/matplotlib/colors.py` - `lib/matplotlib/gridspec.py` - `lib/matplotlib/lines.py` - `lib/matplotlib/patches.py` - `lib/matplotlib/path.py` - `lib/matplotlib/projections/geo.py` - `lib/matplotlib/projections/polar.py` - `lib/matplotlib/quiver.py` - `lib/matplotlib/widgets.py` - `lib/mpl_toolkits/axisartist/angle_helper.py` - `lib/mpl_toolkits/axisartist/floating_axes.py` - `lib/mpl_toolkits/axisartist/grid_finder.py` - `lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py` - `lib/mpl_toolkits/mplot3d/art3d.py` - `lib/mpl_toolkits/mplot3d/axes3d.py` - `lib/mpl_toolkits/mplot3d/proj3d.py` ### Testing The changes maintain the exact same behavior as before - only the underlying implementation is changed for performance. The existing test suite should pass without modification. Closes #31130